UISplitViewController 在不添加启动密码时,开机默认的委托方中执行顺序为
先 调用
-(void)splitViewController:(UISplitViewController *)svc willHideViewController:(UIViewController *)aViewController withBarButtonItem:(UIBarButtonItem *)barButtonItem forPopoverController:(UIPopoverController *)pc
再 调用
- (void)splitViewController:(UISplitViewController *)svc willShowViewController:(UIViewController *)aViewController invalidatingBarButtonItem:(UIBarButtonItem *)barButtonItem
但是:
如果 添加了启动密码之后,密码框要 以 模式视图的形式添加,所以 此时就不会再调用
放发了,
- (void)splitViewController:(UISplitViewController *)svc willShowViewController:(UIViewController *)aViewController invalidatingBarButtonItem:(UIBarButtonItem *)barButtonItem
如果需要的话(在分割视图中 需要控制导航栏 的按钮个数时),可以在输入密码结束后 手工调用
如下:
[self splitViewController:splitController willShowViewController:masterController invalidatingBarButtonItem:nil];
、、、、、、、、、、、、、、、、、、、、、、不仅仅如此、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、
在 添加玩密码框之后,还需要手工调用 master 与 detail的 转屏方法
如下:
UIInterfaceOrientation orientation = self.splitController.interfaceOrientation;
UIInterfaceOrientation masterFrom = self.masterController.interfaceOrientation;
UIInterfaceOrientation detailFrom = self.detailController.interfaceOrientation;
[self.masterController willRotateToInterfaceOrientation:orientation duration:.1];
[self.detailController willRotateToInterfaceOrientation:orientation duration:.1];
[self.masterController didRotateFromInterfaceOrientation:masterFrom];
[self.detailController didRotateFromInterfaceOrientation:detailFrom];
综上所述:在添加玩密码框之后 可以将方法封装一下,如下,待密码输入正确时调用
在 (UISplitViewController *)svc willHideViewController:(UIViewController *)aViewController withBarButtonItem:(UIBarButtonItem *)barButtonItem forPopoverController:ButtonItem;
方法中调用下面的语句,保存 master 的按钮(因为时系统作为参数传递过来的),在手动调用时要用到
profileBarButtonItem = barsplitViewController:
- - (void)passcodeViewDidDismiss
- {
- UIInterfaceOrientation orientation = self.splitController.interfaceOrientation;
- UIInterfaceOrientation masterFrom = self.masterController.interfaceOrientation;
- UIInterfaceOrientation detailFrom = self.detailController.interfaceOrientation;
- [self.masterController willRotateToInterfaceOrientation:orientation duration:.1];
- [self.detailController willRotateToInterfaceOrientation:orientation duration:.1];
- [self.masterController didRotateFromInterfaceOrientation:masterFrom];
- [self.detailController didRotateFromInterfaceOrientation:detailFrom];
- CGFloat deviceHeight = [[UIScreen mainScreen]applicationFrame].size.height;
- if (1024 == deviceHeight) { //只有当设备是横屏显示时
- [self splitViewController:splitController willShowViewController:masterController invalidatingBarButtonItem:nil]; // 分割视图在 添加密码框时,启动时不会走此方法,所以需要手动调用
- }
- else
- {
- [self splitViewController:splitController willHideViewController:masterController withBarButtonItem:profileBarButtonItem forPopoverController:self.currentPopover];
- }