1

ユーザーが「追加」ボタンを押すと、情報を入力するためのモーダルビューがポップアップ表示されます。ナビゲーションバーの左上に「キャンセル」ボタンがあり、現在のViewControllerが押されたときにそれを閉じたいと思っています。オブジェクトをクラスのデリゲートとして設定するにはどうすればよいですか?プロトコルの作成とそのメソッドの実装は理解していますが、デリゲートを設定できないようです。デバッガーを実行する場合[self delegate]、「追加」ビューコントローラーのmyは常にnilです。

4

3 に答える 3

0
@interface MyViewController : UIViewController {
  id delegate;
}
@property (nonatomic,retain) id delegate;
@synthesize delegate;

これでうまくいくはずです。[MyViewController setDelegate:self]モーダルビューを表示する前に使用[[self delegate] dismissModalViewControllerAnimated:YES]して、キャンセルボタンをタップしたイベントを呼び出すことができます。MyViewController

于 2012-07-09T22:13:58.473 に答える
0

IBでビューを作成した場合は、Controlキーを押しながらボタンをViewControllerのヘッダーファイルにドラッグし、IBOutletを追加します。.mファイルのそのメソッド内で次のことができます

[self dismissModalViewControllerAnimated:YES];

または、プログラムでボタンを作成することもできます。

self.navigationItem.leftBarButtonItem = [[UIBarButtonItem alloc] initWithBarButtonSystemItem:UIBarButtonSystemItemCancel target:self action:@selector(processCancel:)];

-(void)processCancel:(UIBarButtonItem *)item{
     [self dismissModalViewControllerAnimated:YES];
}
于 2012-07-09T22:09:12.893 に答える
0

ストーリーボードに設定されたセグエを介してモーダルviewControllerを生成していますか?その場合、prepareForSegue:メソッドでデリゲートをそこに設定します。

- (void)prepareForSegue:(UIStoryboardSegue *)segue sender:(id)sender
{ 
    if([identifier isEqualToString:@"userGuideSegue_home"]){
        UserGuideViewController* vc = segue.destinationViewController;
          [[segue destinationViewController] setDelegate:self];
    }

}

一方、完全にコードを使用してモーダルviewControllerを設定する場合は、モーダルviewControllerのインスタンスを作成してから、そのデリゲートを設定します。

- (void)showModelView:(NSString*)viewName
{
    // code ripped out of project so a bit specific

    if ([viewName isEqualToString:@"userGuide_name"]) {
        modalViewController = (UserGuideViewController * )
        [[UIStoryboard storyboardWithName:@"MainStoryboard_iPhone" bundle:NULL] 
         instantiateViewControllerWithIdentifier:@"UserGuide"];
    }

    modalViewController.delegate = self;
    modalViewController.modalPresentationStyle = UIModalPresentationFormSheet;
    modalViewController.modalTransitionStyle = UIModalTransitionStyleCoverVertical;
    modalViewController.view.frame = [[UIScreen mainScreen] applicationFrame];; 


    [self presentViewController:modalViewController 
                       animated:YES 
                     completion:^{
                         //put your code here
                     }];
}

もちろん、これはすべてdelegate、モーダルviewControllerでプロパティを定義していることを前提としています。

于 2012-07-09T22:13:43.133 に答える