当用户按下“添加”按钮时,会弹出一个模态视图,供他们输入信息。我在导航栏的左上角有一个“取消”按钮,我希望它在按下时关闭当前视图控制器。如何将对象设置为类的委托?我理解创建协议和实现其方法,但我似乎无法设置委托。运行调试器时,“添加”视图控制器中的[self delegate]
始终为nil
。
答案 0 :(得分:0)
如果您在IB中创建了视图,请将按钮拖动到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];
}
答案 1 :(得分:0)
您是通过Storyboard中设置的segue产生模态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
}];
}
当然,所有这些假设您已在模态viewController上定义了delegate
属性。
答案 2 :(得分:0)
@interface MyViewController : UIViewController {
id delegate;
}
@property (nonatomic,retain) id delegate;
@synthesize delegate;
这应该可以胜任,您现在可以在显示模态视图之前使用[MyViewController setDelegate:self]
,并在[[self delegate] dismissModalViewControllerAnimated:YES]
MyViewController