在splitView上显示模态视图

时间:2010-06-04 11:34:36

标签: iphone ipad modal-dialog uisplitviewcontroller

我在创建通用应用程序时遇到问题...在应用程序委托中,我设置了ipad和iphone的主导航:

- (BOOL)application:(UIApplication *)application didFinishLaunchingWithOptions:(NSDictionary *)launchOptions {    
 window = [[UIWindow alloc] initWithFrame:[ [UIScreen mainScreen] bounds]];
 if (UI_USER_INTERFACE_IDIOM() == UIUserInterfaceIdiomPad) {
// The device is an iPad running iPhone 3.2 or later.
  [self putSplitView];
 } else {
  [self putTabBar];
 }
 [window makeKeyAndVisible]; 
 return YES;
}

- (void)putSplitView {
 RootiPadViewController *rootiPadViewController = [[RootiPadViewController alloc] init];
 UISplitViewController *splitController = [[UISplitViewController alloc] init];
 splitController.viewControllers = [NSArray 
        arrayWithObjects:rootiPadViewController.seccionesView,
                         rootiPadViewController.noticiasView, 
                         nil];
    [window addSubview:splitController.view];
}

- (void)putTabBar {
 TabBarController *tabBar = [[TabBarController alloc] init];
 [window addSubview:tabBar.view];
}

RootiPadViewController负责加载数据并生成splitView的窗格,因此它的初始化包含一个带有加载器的modalView,这样:

@implementation RootiPadViewController

@synthesize seccionesView, noticiasView;

- (id)init {
 if ((self = [super init])) {
  SeccionesVC_iPad *sec = [[SeccionesVC_iPad alloc] init];
  NoticiasVC_iPad *not = [[NoticiasVC_iPad alloc] init];
  self.noticiasView = not;
  self.seccionesView = sec;
  Init *initVC = [[Init alloc] init];
  [self presentModalViewController:initVC animated:YES];
 }
 return self;
}

代码编译时没有警告,但由于某种原因,从不调用initVC的loadView方法,并且模态视图不会出现...

为什么会发生这种情况的任何想法? 谢谢你的帮助!

安东尼奥

2 个答案:

答案 0 :(得分:2)

我知道这是去年的问题,但是当我认为我找到了原因时,我仍然试图找到一个很好的非黑客解决方案来解决这个问题。

假设您正在为iPad工作:

初始化时,首先调用splitViewController Master的viewDidLoad,然后调用Detail的viewDidLoad。

如果你试图在Master的viewDidLoad中放置一个模态窗口初始化器,似乎什么也没发生:这是因为Detail的viewDidLoad已经在你的模态视图的viewDidLoad之后执行,导致你的模态视图被隐藏起来。

断开模态视图类,我看到它在模态视图中输入initWithNibName。我不使用ARC,在这里我假设你的模态视图在程序退出之前不会释放 - 模态视图仍然存在,但是没有办法达到它。

在iPhone中: 忽略这一点 - 因为没有适用于iPhone的splitViewController。实际上,默认的Universal splitViewController项目将Master和Detail视图视为单独的页面。因此,在应用程序初始化时,您需要担心的是Master viewDidLoad。

这就是为什么在一个环球项目中,推动viewDidLoad中的模态视图在iPhone模拟器中按预期工作,但从不在iPad模拟器中。

请注意,这仅适用于viewDidLoad阶段;如果您在viewDidLoad之后将模态视图推入主窗口,则模态视图将按预期工作。

答案 1 :(得分:1)

也许你应该从RootViewController的'ViewDidLoad'方法中呈现你的模态ViewController,而不是'init'方法...不确定很快就会创建视图层次结构