1

当用户按下“添加”按钮时,会弹出一个模式视图供他们输入信息。我在导航栏的左上角有一个“取消”按钮,我希望它在按下时关闭当前的视图控制器。如何将对象设置为类的委托?我了解创建协议并实现其方法,但我似乎无法设置委托。在“添加”视图控制器中运行调试器时,我[self delegate]始终是nil.

4

3 回答 3

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

您是否通过情节提要中设置的 segue 生成模态视图控制器?如果是这样,那么在该prepareForSegue:方法中您将在那里设置委托。

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

}

另一方面,如果您完全通过代码设置模态视图控制器,那么您将创建模态视图控制器的一个实例,然后将其设置为委托。

- (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在模态视图控制器上定义了一个属性。

于 2012-07-09T22:13:43.133 回答
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 回答