Ios 如何使导航窗格栏按钮项在纵向模式下显示在详细视图控制器中?
最初,我在故事板中手动设置了一个UISplitViewController。我将主视图和详细视图控制器都嵌入了导航控制器 我唯一的问题是导航窗格栏按钮项以纵向模式显示,以便用户可以调用左窗格tableview 我求助于使用苹果公司的多视图详细代码,做的和这个链接中的家伙做的差不多: 在情节提要中,我明确设置了主视图和详图视图控制器。我还能够使用Interface Builder和NSObject设置splitViewController的委托。但下面的委托从未获得下面调用的方法:Ios 如何使导航窗格栏按钮项在纵向模式下显示在详细视图控制器中?,ios,objective-c,uisplitviewcontroller,Ios,Objective C,Uisplitviewcontroller,最初,我在故事板中手动设置了一个UISplitViewController。我将主视图和详细视图控制器都嵌入了导航控制器 我唯一的问题是导航窗格栏按钮项以纵向模式显示,以便用户可以调用左窗格tableview 我求助于使用苹果公司的多视图详细代码,做的和这个链接中的家伙做的差不多: 在情节提要中,我明确设置了主视图和详图视图控制器。我还能够使用Interface Builder和NSObject设置splitViewController的委托。但下面的委托从未获得下面调用的方法: // "Det
// "DetailViewManager.h"
-(void)setDetailViewController:(UIViewController<SubstitutableDetailViewController> *)detailViewController
{
self.detailViewController.navigationPaneBarButtonItem = nil;
self.detailViewController = detailViewController;
self.detailViewController.navigationPaneBarButtonItem = self.navigationPaneButtonItem;
UIViewController *navigationViewController = [self.splitViewController.viewControllers objectAtIndex:0];
NSArray *viewControllers = [NSArray arrayWithObjects:navigationViewController, self.detailViewController, nil];
self.splitViewController.viewControllers = viewControllers;
if (self.navigationPopoverController) {
[self.navigationPopoverController dismissPopoverAnimated:YES];
}
}
当我第一次将splitViewController设置为rootViewController时,每当我尝试以编程方式设置详图视图控制器时,我就会使用我刚才提到的第一个委托方法进入一个无限循环:
// "LogVC.h"
- (IBAction)loginButtonPressed:(id)sender {
AppDelegate *appDelegate = (AppDelegate *)[[UIApplication sharedApplication] delegate];
UISplitViewController *splitViewController = [self.storyboard instantiateViewControllerWithIdentifier:@"splitViewController"];
DetailViewManager *detailViewManager = (DetailViewManager *)splitViewController.delegate;
detailViewManager.detailViewController = splitViewController.viewControllers.lastObject;
UIViewAnimationOptions transitionAnimation;
if (UIDeviceOrientationIsLandscape([UIDevice currentDevice].orientation)) {
transitionAnimation = UIViewAnimationOptionTransitionFlipFromLeft;
} else {
transitionAnimation = UIViewAnimationOptionTransitionFlipFromTop;
}
[UIView transitionWithView:appDelegate.window duration:0.75 options:transitionAnimation animations:^{
appDelegate.window.rootViewController = splitViewController;
} completion:nil];
}
我想,在Apple提供的代码中,我无法理解的是,委托方法何时被调用,因为我不记得他们配置了详细视图控制器,而我在脚本中设置了详细视图控制器,然后以编程方式进行了设置
更新:
我已经能够通过下面的代码将脚本中实例化的视图控制器作为详细视图控制器传递给我的详细视图管理器:
// "LogVC.h"
UIViewController <SubstitutableDetailViewController> *detailViewController = nil;
detailViewController = [self.storyboard instantiateViewControllerWithIdentifier:@"identifier"];
DetailViewManager *detailViewManager = (DetailViewManager *)splitViewController.delegate;
detailViewManager.detailViewController = detailViewController;
我觉得我不能简单地将navigationPaneBarButtonItem添加到self.navigationController.toolbar,我必须创建自己的工具栏。这是正确的吗?你的问题是什么?我的问题仍然和我最初问的一样,但我只是提供了我到目前为止所做的事情的细节,以给人们一些背景。没有答案,但当我将self.detailViewController=detailViewController更改为_detailViewController=detailViewController时,无限循环停止。为什么会这样?现在,当我将splitViewController.ViewController.lastObject传递给detailViewManager.detailViewController时,我传递的是一个nil对象。我假设如果在interface builder中设置详图视图控制器的类,则该类将是splitViewController上viewControllers数组属性的第二个对象。这是错误的吗?当我在调试器中执行po splitViewController.ViewController时,我会得到以下信息:,如何到达堆栈上的视图控制器?
// "LogVC.h"
UIViewController <SubstitutableDetailViewController> *detailViewController = nil;
detailViewController = [self.storyboard instantiateViewControllerWithIdentifier:@"identifier"];
DetailViewManager *detailViewManager = (DetailViewManager *)splitViewController.delegate;
detailViewManager.detailViewController = detailViewController;
// "DetailViewController.h"
-(void)setNavigationPaneBarButtonItem:(UIBarButtonItem *)navigationPaneBarButtonItem
{
if (navigationPaneBarButtonItem != _navigationPaneBarButtonItem) {
if (navigationPaneBarButtonItem) {
[self.navigationController.toolbar setItems:[NSArray arrayWithObject:navigationPaneBarButtonItem] animated:NO];
} else {
[self.navigationController.toolbar setItems:nil];
}
_navigationPaneBarButtonItem = navigationPaneBarButtonItem;
}
}