如何从另一个类访问UISplitViewController中的自定义UIViewController

问题描述:

我在UISplitViewController中有一个自定义的customUIViewController,并想从另一个类的detailView(这是UISplitViewController中的另一个UIViewController)访问customUiViewController的实例;我怎样才能做到这一点?如何从另一个类访问UISplitViewController中的自定义UIViewController

CODE SNIP(别担心有关语法;它是缩短了)

myAppDelegate.m

customViewController *masterView = [[customViewController alloc] init; 
UINavigationController *NVC = [[UINavigationController alloc] initWithRootViewController:masterView]; 

MYViewController *detailView = [[MyViewController alloc] init; 

UISplitViewController *mySplit = [...]; 

mySplit.viewControllers = NSArray[...masterview,detailView,nil]; 

[window addSubView:mySplit view]; 

MyViewController.m

-(void) someMethod { 
     customViewController *myInstance = (customViewController)[self.splitViewController objectAtIndex:0]; ?? 
// I think this just gets the outter UINavigationController 
     [myInstance doSomething]; 
} 

customViewController.m

-(void) doSomething { 
} 

I希望能够访问customViewController来调用doSomething方法。无论customViewController和myViewController相同UISplitViewController

如果你正在使用默认UISplitView工作XCode所做的,你需要引用AppDelegate来获得splitView的ivar:

YourAppDelegate *del = (YourAppDelegate *)[[UIApplication sharedApplication]delegate]; 
UISplitViewController *split = del.splitViewController; 
NSArray *vcArray = split.viewControllers; 
//left is objectAtIndex:0, right is objectAtIndex:1 
+0

这个工程!谢谢 – Arcadian 2010-11-07 00:21:34

+0

为什么我只在split.viewControllers中有一个。在iPad上工作,但不适用于iPhone – Gank 2014-12-17 09:10:30

UIViewControllers有splitViewController属性,因此尝试使用,要得到一个内部参考:

customViewController *myInstance = 
    (customViewController *)[self.splitViewController.viewControllers 
           objectAtIndex:0]; 

指数0是在拆分视图控制器左侧视图控制器。

编辑:
如果左侧视图控制器是一个UINavigationController,然后得到的根视图控制器,这样做:

UINavigationController *nc = 
    (UINavigationController *)[self.splitViewController.viewControllers 
           objectAtIndex:0]; 

customViewController *myInstance = 
    (customViewController *)[nc.viewControllers objectAtIndex:0]; 
+0

好的。这是我提到的另一个问题。 我已经有了你建议的代码,它的效果很好。 masterView位于UINavigationController里面 – Arcadian 2010-11-04 13:19:54

+0

更新了答案。 – Anna 2010-11-04 13:31:36

+0

我想我做了这件事,并记住得到一个警告-customViewController可能不会响应doSomething – Arcadian 2010-11-04 13:45:42