我有一个带有主控制器和细节控制器的UISplitViewController
:
MyMasterController *masterViewController = [[[MyMasterController alloc] initWithDirectory:directoryElement] autorelease];
MyDetailController *detailViewController = [[MyDetailController alloc] init];
masterViewController.detailViewController = detailViewController;
UISplitViewController *splitViewController = [[UISplitViewController alloc] init];
splitViewController.viewControllers = @[[[UINavigationController alloc] initWithRootViewController:masterViewController], [[UINavigationController alloc] initWithRootViewController:detailViewController]];
splitViewController.delegate = self;
MyDetailController
是一个表列表视图控制器,我想在用户点击单元格时掌握视图控制器运行的一种方法,那么如何获取详细控制器中的主控制器呢?
- (void) tableView:(UITableView *)tableView didSelectRowAtIndexPath:(NSIndexPath *)indexPath
{
[master some_method]; // how to get ?
}
答案 0 :(得分:15)
我会使用通知,所以在你的主人:
-(void) viewDidLoad {
...
[[NSNotificationCenter defaultCenter] addObserver:self selector:@selector(someMethod) name:@"DoSomeMethod" object:nil];
}
-(void) someMethod {
...
}
在你的细节中:
- (void) tableView:(UITableView *)tableView didSelectRowAtIndexPath:(NSIndexPath *)indexPath {
[[NSNotificationCenter defaultCenter] postNotificationName:@"DoSomeMethod" object:nil];
}
答案 1 :(得分:0)
虽然jjv360s的答案很有帮助,但有些人肯定希望将值传递给被调用的方法。 以下教程帮助了我:
http://www.devfright.com/nsnotificationcenter-tutorial/
要传递值value
,您需要将value
公开为发送通知的类中的属性。接收方法需要将(id)
强制转换为公开value
。