ios UISplitViewController问题
我有一个应用程序,它使用ios UISplitViewController问题,ios,orientation,uisplitviewcontroller,uipopovercontroller,uisplitviewdelegate,Ios,Orientation,Uisplitviewcontroller,Uipopovercontroller,Uisplitviewdelegate,我有一个应用程序,它使用UISplitViewController。我添加了它的代理,并在导航栏上指定了一个按钮,以便在应用程序处于纵向模式时,能够在弹出视图中显示主视图控制器: /* @property (strong, nonatomic) id detailItem; @property (strong, nonatomic) UIPopoverController *masterPopoverController; */ #pragma mark - Man
UISplitViewController
。我添加了它的代理,并在导航栏上指定了一个按钮,以便在应用程序处于纵向模式时,能够在弹出视图中显示主视图控制器:
/*
@property (strong, nonatomic) id detailItem;
@property (strong, nonatomic) UIPopoverController *masterPopoverController;
*/
#pragma mark - Managing the detail item
- (void)setDetailItem:(id)newDetailItem
{
if (_detailItem != newDetailItem) {
_detailItem = newDetailItem;
// do smth
}
if (self.masterPopoverController != nil) {
[self.masterPopoverController dismissPopoverAnimated:YES];
}
}
#pragma mark - UISplitViewDelegate methods
- (void)splitViewController:(UISplitViewController *)splitController willHideViewController:(UIViewController *)viewController withBarButtonItem:(UIBarButtonItem *)barButtonItem forPopoverController:(UIPopoverController *)popoverController
{
barButtonItem.title = NSLocalizedString(@"", @"");
UIImage *imag = [[UIImage imageNamed:@"gray_button"]resizableImageWithCapInsets:UIEdgeInsetsMake(0, 7, 0, 7)];
UIImage *imag_pressed = [[UIImage imageNamed:@"gray_button_pressed"]resizableImageWithCapInsets:UIEdgeInsetsMake(0, 7, 0, 7)];
UIImage *more = [UIImage imageNamed:@"shows_button_pressed.png"];
[barButtonItem setBackgroundImage:imag forState:UIControlStateNormal barMetrics:UIBarMetricsDefault];
[barButtonItem setBackgroundImage:imag_pressed forState:UIControlStateHighlighted barMetrics:UIBarMetricsDefault];
[barButtonItem setImage:more];
[self.navigationItem setLeftBarButtonItem:barButtonItem animated:YES];
self.masterPopoverController = popoverController;
}
- (void)splitViewController:(UISplitViewController *)splitController willShowViewController:(UIViewController *)viewController invalidatingBarButtonItem:(UIBarButtonItem *)barButtonItem
{
// Called when the view is shown again in the split view, invalidating the button and popover controller.
[self.navigationItem setLeftBarButtonItem:nil animated:YES];
self.masterPopoverController = nil;
}
如果在主视图控制器中选择了一个选项,则RootViewController(基本上是我的分割视图控制器的细节分割)将更改为替换类型segue。我再次分配UISplitViewController
委托。
我的问题是,除非我将设备置于横向模式,然后返回到纵向模式,否则根目录更改后条形按钮不会显示。如果我这样做了,按钮就在那里,并且完成了它的工作
如果不将设备置于横向,然后返回到纵向,如何使按钮显示
PS:我已尝试在旧根视图控制器中的prepareforsgue:
方法中分配新代理,并在新根视图控制器中的视图中分配新代理将出现:
方法。同样的事情也会发生。
另一件事:新的根视图控制器实现了
更新:
我发现方法:-(void)splitViewController:(UISplitViewController*)svc将隐藏控制器:(UIViewController*)aViewController with barbuttoneim:(uibarbuttoneim*)barbuttoneim for popcovercontroller:(uipopcovercontroller*)pc
只有在我从横向转到纵向后才会被调用,因此我需要旋转设备才能显示按钮
这两个委托之间的区别在于,第一个委托添加在旧的根视图控制器中的myAppDelegate.m
中,第二个委托添加在prepareForSegue:
方法中。一旦应用程序启动,就会为旧的根视图控制器调用上述方法