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

时间:2010-11-04 12:44:37

标签: iphone objective-c

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

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 {
}

我希望能够访问customViewController以调用doSomething方法。 customViewController和myViewController都在同一个UISplitViewController

2 个答案:

答案 0 :(得分:5)

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];

答案 1 :(得分:2)

如果你正在使用XCode制作的默认UISplitView,你需要引用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