Xcode代表团

时间:2012-07-09 22:06:13

标签: ios xcode delegates

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

3 个答案:

答案 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