我在创建通用应用程序时遇到问题...在应用程序委托中,我设置了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方法,并且模态视图不会出现...
为什么会发生这种情况的任何想法? 谢谢你的帮助!
安东尼奥
答案 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'方法...不确定很快就会创建视图层次结构