在根视图控制器中,当我单击一个按钮时,视图控制器将推送到类别视图控制器,然后它将呈现一个子视图控制器。当我选择一行时,子视图控制器关闭,然后返回到类别,然后返回到根视图控制器。我在子视图控制器中创建了一个委托,根视图控制器符合此委托。如果委托是在类别视图控制器中创建的,我可以处理它。但它是在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];
}
答案 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 ...