无法使presentViewController工作

时间:2012-04-13 20:07:45

标签: iphone xcode ipad presentmodalviewcontroller

我将一个工作的viewcontroller类从另一个项目复制到一个新项目中。我无法在新项目中加载视图。在旧项目中,我使用了presentModalViewController。在新的我无法使用presentModalViewController或presentViewController

加载视图

我正在尝试从主视图控制器加载当前视图。

这是我的主视图控制器界面的样子......

//  ViewController.h
#import <UIKit/UIKit.h>
#import "RequestDialogViewController.h"

@interface ViewController : UIViewController <RequestDialogViewControllerDelegate> {

}

- (void)requestDialogViewDidDismiss:(RequestDialogViewController *)controller withResponse:(NSString*)response;

我正在使用这样的presentModalViewController ......

RequestDialogViewController *requestIPViewController = [[RequestDialogViewController alloc] initWithNibName:@"RequestDialogViewController"  bundle:nil];
navigationController = [[UINavigationController alloc] initWithRootViewController:requestIPViewController];
[self presentModalViewController:navigationController animated:YES];
像这样的

和presentViewController ...

RequestDialogViewController *requestIPViewController = [[RequestDialogViewController alloc] initWithNibName:@"RequestDialogViewController"  bundle:nil];    
[self presentViewController:requestIPViewController animated:YES completion:nil];

我在新项目中缺少什么?触发init方法,但viewDidLoad不会触发,也不会显示任何内容。

由于

5 个答案:

答案 0 :(得分:84)

如果ViewController是根视图控制器,则它无法在其自己的viewDidLoad内呈现模态视图控制器,因为此时它没有屏幕大小等信息。 / p>

如果已经显示其他视图控制器,则可以使用。如果根视图控制器是UINavigationController,当模态视图从底部向上滑动时,您将看到从右侧滑入的视图。

无论如何,对于你的ViewController,你最快可以呈现它是在它变得可见之后。使用计时器是不可靠的;较旧和较慢的设备具有显着更长的加载时间。

为了获得更高的可靠性,请为viewDidAppear:实施ViewController。仍然使用您的计时器系统添加额外的延迟;几分之一秒就足够了。虽然在iOS 5.1模拟器中为我提供模态视图控制器viewDidAppearPresenting a modal view controller when loading another ViewController说它有时不会发生。

答案 1 :(得分:4)

我已经解决了。我试图从视图中显示主视图控制器的负载。不知道为什么它在那里不起作用,而是我现在设置一个定时器,它调用一个方法在主视图加载后呈现视图控制器,现在它正常工作...

[self presentViewController:requestIPViewController animated:YES completion:nil]; 

感谢那些回复的人。

答案 2 :(得分:3)

正如@Dondragmer所说,如果你想在root视图的viewDidLoad中展示你的viewController,它将会失败。一旦你的viewController准备就绪,你就可以展示你的新viewController。 所以,你可以在

中做到这一点
- (void)viewDidLayoutSubviews {
    //present here
}

答案 3 :(得分:0)

我遇到了同样的问题。但我的情况是presentViewController在另一个ViewController的dismissViewControllerAnimated之后调用。我的解决方案是将presentViewController移至dismissViewControllerAnimated的完成块。

答案 4 :(得分:-1)

提出modalViewController:

为了所有初学程序员的利益,请键入它而不是复制粘贴。

myVC *viewController = [[myVC alloc]initWithNibName:@"myVC" bundle:nil];
viewController.modalTransitionStyle = UIModalTransitionStyleFlipHorizontal;
[self presentModalViewController:viewController animated:YES];
[viewController release];

看起来你试图在第一个样本中将导航控制器作为视图控制器呈现,然后你在第二个中使用了错误的方法。