Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/cocoa/3.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Objective c UISplitViewController纵向模式缺少UIBarButtonItem_Objective C_Ipad_Uisplitviewcontroller - Fatal编程技术网

Objective c UISplitViewController纵向模式缺少UIBarButtonItem

Objective c UISplitViewController纵向模式缺少UIBarButtonItem,objective-c,ipad,uisplitviewcontroller,Objective C,Ipad,Uisplitviewcontroller,我有一个带有UISplitViewController的应用程序,当我在potrait模式下启动应用程序时,它缺少“组”UIBarbuttonite。我需要切换到横向模式,然后返回potrait使其显示出来。当我以横向模式启动它时,它就在那里。下面是一些屏幕截图,可以清楚地说明这一点: 这是在纵向模式下启动应用程序的时间 这是在横向模式下,从纵向模式旋转后: 这是在从横向模式转回到纵向模式之后:前几天我也发生了同样的事情。您只需确保详图视图是splitView的代理。如果尝试在局部视图的vi

我有一个带有UISplitViewController的应用程序,当我在potrait模式下启动应用程序时,它缺少“组”UIBarbuttonite。我需要切换到横向模式,然后返回potrait使其显示出来。当我以横向模式启动它时,它就在那里。下面是一些屏幕截图,可以清楚地说明这一点:

这是在纵向模式下启动应用程序的时间

这是在横向模式下,从纵向模式旋转后:


这是在从横向模式转回到纵向模式之后:

前几天我也发生了同样的事情。您只需确保详图视图是splitView的代理。如果尝试在局部视图的
viewDidLoad
中设置委托,则在splitView加载(使用根tableView控制器)之后才会设置委托。这就是为什么在你切换到风景区并返回之前,它不会被放置。设置代理的最佳方法是在应用程序代理实现文件中(当您创建UISplitViewController时,这是最好的方法)或在根tableView控制器中使用类似的内容

- (void)viewDidLoad {
    self.splitViewController.delegate = [self.splitViewController.viewControllers objectAtIndex:1];
}
这使得细节视图成为委托视图,因此当它在tableView控制器加载之后加载时,它将调用您的
splitViewController:willHideViewController:…
方法


当然,情况可能并非如此。我只是假设,因为我有完全相同的行为,这可能是相同的原因。如果这不起作用,就这么说吧,我们会找到原因的

我也无法找出这个问题,因为我的代码和IB连接似乎与苹果的多细节视图示例源代码相同

通过将第二行到最后一行中的引用从self.splitViewController(左视图控制器类的属性)更改为自动传递给该方法的svc,我可以使它正常工作。我在调试器中注意到,由于某种原因,前者还没有被实例化。(内存位置为0x00000000)

-(void)splitViewController:(UISplitViewController*)svc将隐藏设备控制器:(UIViewController*)带有barButtonItem的aViewController:(UIBarButtonItem*)用于PopOvercontroller的barButtonItem:(UIPopoverController*)pc{
//保留对popover控制器和popover按钮的引用,并告诉详细视图控制器显示该按钮。
barButtonItem.title=@“菜单”;
self.popoverController=pc;
self.rootpovoverbuttonim=巴氏体;
UIViewController*detailViewController=[self.splitViewController.ViewController对象索引:1];
[detailViewController ShowRootPopoOverButtonim:RootPopoOverButtonim];

}

如果在构建它的xib中设置它,它似乎也能持续工作。这是非常正确的。如果您可以避免以编程方式创建splitViewController,它将使您的生活变得更加轻松,因为它为您设置了所有这些。对于需要在没有IB帮助的情况下以编程方式创建它的情况,这只是一种变通方法
- (void)splitViewController:(UISplitViewController*)svc willHideViewController:(UIViewController *)aViewController withBarButtonItem:(UIBarButtonItem*)barButtonItem forPopoverController:(UIPopoverController*)pc {

// Keep references to the popover controller and the popover button, and tell the detail view controller to show the button.
barButtonItem.title = @"Menu";
self.popoverController = pc;
self.rootPopoverButtonItem = barButtonItem;
UIViewController <SubstitutableDetailViewController> *detailViewController = [self.splitViewController.viewControllers objectAtIndex:1];
[detailViewController showRootPopoverButtonItem:rootPopoverButtonItem];