誰でも私に最初にモーダルView Controllerを提示し、それを却下するために使用できるサンプルコードを教えてもらえますか?これは私が試してきたものです:
NSLog(@ "%@"、blue.modalViewController); [blue presentModalViewController:red animated:YES]; NSLog(@ "%@"、blue.modalViewController) ; [blue dismissModalViewControllerAnimated:YES]; NSLog(@ "%@"、blue.modalViewController);
まず、そのコードをapplicationDidFinishLaunchingに配置すると、Interface Builderからインスタンス化されたコントローラーがまだアプリケーションにリンクされていない可能性があります(つまり、「赤」と「青」はnil
です)。
しかし、最初の質問に答えるために間違っているのは、間違ったコントローラーでdismissModalViewControllerAnimated:
を呼び出しているということです!次のようになります。
[blue presentModalViewController:red animated:YES];
[red dismissModalViewControllerAnimated:YES];
通常、「赤」のコントローラーは、ある時点で(「キャンセル」ボタンがクリックされたときに)自分自身を解雇することを決定する必要があります。次に、「赤」コントローラーはself
のメソッドを呼び出すことができます。
[self dismissModalViewControllerAnimated:YES];
それでも機能しない場合は、コントローラーがアニメーション形式で表示されているという事実と関係がある可能性があります。そのため、コントローラーを表示してすぐに却下できない場合があります。
Swift 3に更新
それぞれにボタンがある2つのView Controllerを作成します。 2番目のView Controllerでは、クラス名をSecondViewController
に設定し、ストーリーボードIDをsecondVC
に設定します。
ViewController.Swift
import UIKit
class ViewController: UIViewController {
@IBAction func presentButtonTapped(_ sender: UIButton) {
let storyboard = UIStoryboard(name: "Main", bundle: nil)
let myModalViewController = storyboard.instantiateViewController(withIdentifier: "secondVC")
myModalViewController.modalPresentationStyle = UIModalPresentationStyle.fullScreen
myModalViewController.modalTransitionStyle = UIModalTransitionStyle.coverVertical
self.present(myModalViewController, animated: true, completion: nil)
}
}
SecondViewController.Swift
import UIKit
class SecondViewController: UIViewController {
@IBAction func dismissButtonTapped(_ sender: UIButton) {
self.dismiss(animated: true, completion: nil)
}
}
ソース:
Xcode 4.52で疲れた最も簡単な方法は、追加のビューを作成し、セグエモーダルを使用してそれらを接続することでした(コントロールをビュー1から2番目のビューにドラッグし、モーダルを選択します)。次に、ボタンを2番目のビューまたは作成したモーダルビューにドラッグします。このボタンを制御してヘッダーファイルにドラッグし、アクション接続を使用します。これにより、controller.mファイルにIBactionが作成されます。コードでボタンアクションタイプを見つけます。
[self dismissViewControllerAnimated:YES completion:nil];
presentModalViewController:
MainViewController *mainViewController=[[MainViewController alloc]init];
[self.navigationController presentModalViewController:mainViewController animated:YES];
dismissModalViewController:
[self dismissModalViewControllerAnimated:YES];
Swift
self.dismissViewControllerAnimated(true, completion: nil)
最も簡単な方法は、ストーリーボードとセグエを使用することです。
ログインUIを使用してTabBarControllerのFirstViewController(Navigation Controllerではなく)からLoginViewControllerにセグエを作成し、「showLogin」という名前を付けるだけです。
BOOLを返すメソッドを作成して、ユーザーがログインしているか、セッションが有効かどうかを検証します(できればAppDelegateで)。 isSessionValidと呼びます。
FirstViewController.mで、メソッドviewDidAppearを次のようにオーバーライドします。
- (void)viewDidAppear:(BOOL)animated
{
[super viewDidAppear:animated];
if([self isSessionValid]==NO){
[self performSegueWithIdentifier:@"showLogin" sender:self];
}
}
次に、ユーザーが正常にログインした場合は、LoginViewControllerを閉じるかポップアウトしてタブを表示します。
100%動作します!
それが役に立てば幸い!