这是一篇旧帖子,但我发现它可以帮助我以不同的方式思考,这就是我解决问题的方法。
我以 splitViewController
编程方式创建了我的。然后我用一个数字标记它,并将它作为子视图添加到我当前的视图中。
FirstViewController* firstView = [[[FirstViewController alloc] initWithNibName:@"FirstViewController" bundle:nil] autorelease];
SecondViewController* secondView = [[[SecondViewController alloc] initWithNibName:@"SecondViewController" bundle:nil] autorelease];
UISplitViewController* splitVC = [[UISplitViewController alloc] init];
[splitVC setDelegate:secondView];
splitVC.viewControllers = [NSArray arrayWithObjects:firstView, secondView, nil];
splitVC.view.tag = 99;
[self.view addSubview:splitVC.view];
之后,splitView
显示,但要摆脱它,我必须从视图中删除它,所以我在viewcontrollers
. 在主视图控制器中,我添加了观察者。(注意:主视图控制器不是splitViewController
它的视图或其中之一,它是加载的视图控制器splitViewController
)
NSNotificationCenter *splitViewObserver = [NSNotificationCenter defaultCenter];
[splitViewObserver addObserver:self selector:@selector(removeSplitView) name:@"removeSplitView" object:nil];
在选择器“ removeSplitView
”中,我将当前视图的所有子视图放入 for 循环中,并搜索带有标签 99 的 UIView 类对象并将其从超级视图中删除。
NSArray *subviews = [self.view subviews];
for (int i = 0; i < [subviews count]; i++) {
if ([[subviews objectAtIndex:i] isKindOfClass:[UIView class]]) {
UIView *tempView = [subviews objectAtIndex:i];
if (tempView.tag == 99) {
[[subviews objectAtIndex:i] removeFromSuperview];
}
}
}
ViewController
在 firstView 中,我有一个名为 done 的方法,它发布主要正在观察的通知。
-(IBAction) done:(id)sender {
[fileSelectedNotification postNotificationName:@"removeSplitView" object:self];
}
您还必须fileSelectedNotification
在您的应用程序中创建某个位置。我是通过viewDidLoad
. 它看起来像这样。
fileSelectedNotification = [NSNotificationCenter defaultCenter];
我当然也添加了这个
NSNotiicationCenter *filesSelectedNotification;
到 this 的 .h 文件viewController
。
因此,当我按下完成按钮(这是我的应用程序上的条形按钮)时,它会splitViewController
从视图中删除。
工作正常。我只是从阅读文档中得到了这一切。