Ios 从自定义UISplitview导航回
在我的iPad应用程序中,我有一个主菜单屏幕。。上面有各种各样的图标 点击图标时,它会引导我找到自定义UISplitViewController。我用这个代码做的。在SplitView中,一切正常 问题:点击主视图控制器导航栏中的按钮,我将面临返回主菜单屏幕的问题 自定义UIsplitview的代码:-Ios 从自定义UISplitview导航回,ios,xcode,ios6,xcode4.5,uisplitviewcontroller,Ios,Xcode,Ios6,Xcode4.5,Uisplitviewcontroller,在我的iPad应用程序中,我有一个主菜单屏幕。。上面有各种各样的图标 点击图标时,它会引导我找到自定义UISplitViewController。我用这个代码做的。在SplitView中,一切正常 问题:点击主视图控制器导航栏中的按钮,我将面临返回主菜单屏幕的问题 自定义UIsplitview的代码:- self.navigationController.navigationBarHidden = NO; self.navigationController.navigationBar.barSt
self.navigationController.navigationBarHidden = NO;
self.navigationController.navigationBar.barStyle = UIBarStyleBlack;
left = [[LeftViewController alloc] initWithStyle:UITableViewStylePlain];
UINavigationController *leftNav = [[UINavigationController alloc] initWithRootViewController:left];
right = [[RightViewController alloc] initWithNibName:@"RightViewController" bundle:nil];
UINavigationController *rightNav = [[UINavigationController alloc] initWithRootViewController:right];
left.right = right;
splitViewController = [[UISplitViewController alloc] init];
splitViewController.viewControllers = [NSArray arrayWithObjects:leftNav,rightNav, nil];
splitViewController.delegate = right;
appDelegate = (AppDelegate *)[[UIApplication sharedApplication]delegate];
UISplitViewController *cvc = (UISplitViewController *) splitViewController;
[appDelegate.window setRootViewController:cvc];
编辑:自定义按钮代码
UIButton *a1 = [UIButton buttonWithType:UIButtonTypeCustom];
[a1 setFrame:CGRectMake(0.0f, 0.0f, 32.0f, 32.0f)];
[a1 addTarget:self action:@selector(menu:) forControlEvents:UIControlEventTouchUpInside];
[a1 setImage:[UIImage imageNamed:@"icon.png"] forState:UIControlStateNormal];
UIBarButtonItem *random = [[UIBarButtonItem alloc] initWithCustomView:a1];
left.navigationItem.leftBarButtonItem = random;
- (void)menu {
[self.view removeFromSuperview];
ViewController *vc = [[ViewController alloc] initWithNibName:@"ViewController" bundle:nil];
[appDelegate.window setRootViewController:vc];
[vc release];
}
这会导致崩溃,并显示EXC_BAD_访问消息
请指导我。我不确定这是一个好的设计。从主菜单屏幕床边到分割视图控制器,您还可以做些什么 如果您想保留这种设计,您可以执行在发布代码末尾所做的相同操作——在按钮的操作方法中,创建主菜单控制器的实例,并将其设置为窗口的根视图控制器 编辑后: 我可以看到一个肯定会造成崩溃的问题——当您创建按钮时,您将操作设置为“menu:”,但您的方法实现只是“menu”,没有冒号或参数。去掉冒号,一切都会好起来的 我不认为这三条线会造成麻烦,但没有必要做你正在做的事情:
appDelegate = (AppDelegate *)[[UIApplication sharedApplication]delegate];
UISplitViewController *cvc = (UISplitViewController *) splitViewController;
[appDelegate.window setRootViewController:cvc];
您已经拥有属性或ivar、splitViewController,无需将其重新分配给cvc。此外,无需获取应用程序代理,您可以使用self.view.window获取窗口。因此,这3行可以更改为:
self.view.window.rootViewController = splitViewController;
我假设您可以通过从断点单步执行来查看崩溃发生在代码的哪一行 老实说,我不喜欢这里的软件设计,因为我不会使用UISplitViewController子类。我更可能使用UIViewController包含API创建自定义SplitViewController,然后将其与UINavigationController结合使用
也就是说,如果必须使用UISplitViewController子类,那么我建议使用所有代码在主appDelegate窗口中添加或删除ViewController,然后使用通知通知appDelegate何时添加或删除相关的ViewController(切换根)。通过这种方式,您可以减少同一视图控制器的多个实例可能会导致内存问题。试图让viewController从其父级中删除自身总是很棘手的,最好由父级或更高级别的实体(在本例中为主应用程序委托)管理。@ibiren,您应该编辑您的问题以显示您尝试的代码,以及崩溃时出现的错误。