如何将委托分配给第二个视图控制器

时间:2013-04-19 10:51:51

标签: iphone ios delegates uistoryboard

在根视图控制器中,当我单击一个按钮时,视图控制器将推送到类别视图控制器,然后它将呈现一个子视图控制器。当我选择一行时,子视图控制器关闭,然后返回到类别,然后返回到根视图控制器。我在子视图控制器中创建了一个委托,根视图控制器符合此委托。如果委托是在类别视图控制器中创建的,我可以处理它。但它是在Child视图控制器上创建的,它由Category视图控制器呈现。那么,如何将此委托分配给根视图控制器。触发动作的按钮是这样的:

RootViewController.m

- (void)chooseCat:(BButton *)sender
{
    UIStoryboard *storyboard = [UIStoryboard storyboardWithName:@"MainStoryboard_iPhone" bundle:nil];
    CategoryViewController *cat = [storyboard instantiateViewControllerWithIdentifier:@"Cats"];
// How to create a instance of ChildViewController and assign ChildViewController's delegate to this RootViewController?
    [self.navigationController pushViewController:cat animated:YES];

}

2 个答案:

答案 0 :(得分:1)

两种方式

1)委托桥梁

childView中创建委托,确认CategoryVC。再次在CategoryVC中创建委托,确认rootViewController

然后在rootViewController中为CategoryVC分配委托,并在CategoryVC中委托childView。并传递值或执行任何操作。

2)使用NSNotificationCenter哪一个最简单。

rootViewController中注册通知

[[NSNotificationCenter defaultCenter] addObserver:self
                                         selector:@selector(yourMethod) 
                                             name:@"myNotification"
                                           object:nil];

-(void)yourMethod
{

}

使用来自childView的通知

[[NSNotificationCenter defaultCenter]
             postNotificationName:@"myNotification" 
             object:self];

答案 1 :(得分:0)

您可以将rootView控制器的ref传递给CategoryViewController,然后再传递给ChildViewController,这样您就可以间接为delegate分配rootViewController

如果您必须从chidViewController转到rootViewController,那么您也可以使用NSNotificationCenter。所以需要通过ref ...