web-dev-qa-db-ja.com

モーダルビューコントローラーの表示と非表示

誰でも私に最初にモーダルView Controllerを提示し、それを却下するために使用できるサンプルコードを教えてもらえますか?これは私が試してきたものです:

 NSLog(@ "%@"、blue.modalViewController); 
 [blue presentModalViewController:red animated:YES]; 
 NSLog(@ "%@"、blue.modalViewController) ; 
 [blue dismissModalViewControllerAnimated:YES]; 
 NSLog(@ "%@"、blue.modalViewController); 

70
phunehehe

まず、そのコードをapplicationDidFinishLaunchingに配置すると、Interface Builderからインスタンス化されたコントローラーがまだアプリケーションにリンクされていない可能性があります(つまり、「赤」と「青」はnilです)。

しかし、最初の質問に答えるために間違っているのは、間違ったコントローラーでdismissModalViewControllerAnimated:を呼び出しているということです!次のようになります。

[blue presentModalViewController:red animated:YES];
[red dismissModalViewControllerAnimated:YES];

通常、「赤」のコントローラーは、ある時点で(「キャンセル」ボタンがクリックされたときに)自分自身を解雇することを決定する必要があります。次に、「赤」コントローラーはselfのメソッドを呼び出すことができます。

[self dismissModalViewControllerAnimated:YES];

それでも機能しない場合は、コントローラーがアニメーション形式で表示されているという事実と関係がある可能性があります。そのため、コントローラーを表示してすぐに却下できない場合があります。

106

Swift

Swift 3に更新

enter image description here

絵コンテ

それぞれにボタンがある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)
    }
}

ソース:

13
Suragch

Xcode 4.52で疲れた最も簡単な方法は、追加のビューを作成し、セグエモーダルを使用してそれらを接続することでした(コントロールをビュー1から2番目のビューにドラッグし、モーダルを選択します)。次に、ボタンを2番目のビューまたは作成したモーダルビューにドラッグします。このボタンを制御してヘッダーファイルにドラッグし、アクション接続を使用します。これにより、controller.mファイルにIBactionが作成されます。コードでボタンアクションタイプを見つけます。

[self dismissViewControllerAnimated:YES completion:nil];
13
max

presentModalViewController:

MainViewController *mainViewController=[[MainViewController alloc]init];
[self.navigationController presentModalViewController:mainViewController animated:YES];

dismissModalViewController:

[self dismissModalViewControllerAnimated:YES];
9
Jerry Thomsan

Swift

self.dismissViewControllerAnimated(true, completion: nil)

3
Michael

最も簡単な方法は、ストーリーボードとセグエを使用することです。

ログイン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%動作します!

それが役に立てば幸い!

2
Oscar S.