当前位置:  开发笔记 > 前端 > 正文

UISplitViewController以编程方式没有nib/xib

如何解决《UISplitViewController以编程方式没有nib/xib》经验,为你挑选了2个好方法。

我通常创建没有IB东西的项目.我做的第一件事是剥离所有对xibs,outlet更新plist等的引用.没问题,效果很好(在我的世界里)!

现在,我刚刚安装了3.2并试图开发我的第一个iPad应用程序.按照与以前相同的步骤,我创建了一个基于UISplitView的应用程序项目,并剥离了所有IB的东西.另外,我也跟着苹果的参考文档部分:创建拆分视图控制器编程,但尽管如此,主视图从未显示,仅细节视图是(不管方向是什么).我真的试图仔细看看,但我无法理解我错过了什么.

是否有一个UISplitViewController的工作示例没有在某处漂浮的笔尖?我用谷歌搜索但找不到任何东西.或者你知道我可能错过了什么吗?



1> Nik Burns..:

在你的委托标题中声明你的splitviewcontroller,在你的didfinishlaunching中使用这样的东西

确保将UISplitViewControllerDelegate添加到detailedViewController头文件,并且您还拥有委托方法.记得导入相关的头文件

- (BOOL)application:(UIApplication *)application didFinishLaunchingWithOptions:(NSDictionary *)launchOptions 
{    

    splitViewController = [[UISplitViewController alloc] init];

    rootViewController *root = [[rootViewController alloc] init];
    detailedViewController *detail = [[detailedViewController alloc] init]; 

    UINavigationController *rootNav = [[UINavigationController alloc] initWithRootViewController:root];

    UINavigationController *detailNav = [[UINavigationController alloc] initWithRootViewController:detail];

    splitViewController.viewControllers = [NSArray arrayWithObjects:rootNav, detailNav, nil];
    splitViewController.delegate = detail;

    [window addSubview:splitViewController.view];

编辑 - 根据斯科特的优秀建议,请不要添加到windows子视图

    [self.window setRootViewController:(UIViewController*)splitViewController];  // that's the ticket
    [window makeKeyAndVisible];
    return YES;
}


//detailedView delegate methods
- (void)splitViewController:(UISplitViewController*)svc 
     willHideViewController:(UIViewController *)aViewController 
          withBarButtonItem:(UIBarButtonItem*)barButtonItem 
       forPopoverController:(UIPopoverController*)pc
{  
    [barButtonItem setTitle:@"your title"];



    self.navigationItem.leftBarButtonItem = barButtonItem;
}


- (void)splitViewController:(UISplitViewController*)svc 
     willShowViewController:(UIViewController *)aViewController 
  invalidatingBarButtonItem:(UIBarButtonItem *)barButtonItem
{
    self.navigationItem.leftBarButtonItem = nil;
}

我也更喜欢IB的代码;-)


这个答案正是我一直在寻找的.一个问题:在Apple的参考示例代码(http://developer.apple.com/library/ios/ipad/#samplecode/MultipleDetailViews/Listings/Classes_RootViewController_m.html)中,它们处理根视图控制器中的UiSplitviewcontroller委托.你可以在详细的控制器中处理它.这种或那种方式有原因吗?

2> 小智..:

旧的线程,但是当上述技术无法生成一个能正确响应设备方向更改事件的UISplitViewController时,我认为我会节省阅读时间+悲伤.你需要:

    确保所有从属视图在shouldAutorotateToInterfaceOrientation中正确响应.这里没什么新鲜的.

    而不是将UISplitViewController的视图添加到主窗口,

    [window addSubview:splitViewController.view];   // don't do this
    

    而是将主窗口的根控制器设置为UISplitViewController:

    [self.window setRootViewController:(UIViewController*)splitViewController];  // that's the ticket
    

将splitviewcontroller的视图添加为主窗口的子视图(几乎没有)允许它与兄弟视图共存,但它不能与UISplitViewController的预期用例一起使用.UISplitViewController是一个高地视图; 只能有一个.

推荐阅读
coco2冰冰
这个屌丝很懒,什么也没留下!
DevBox开发工具箱 | 专业的在线开发工具网站    京公网安备 11010802040832号  |  京ICP备19059560号-6
Copyright © 1998 - 2020 DevBox.CN. All Rights Reserved devBox.cn 开发工具箱 版权所有