35

我将一个工作视图控制器类从另一个项目复制到一个新项目中。我无法在新项目中加载视图。在旧项目中,我使用了 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 不会触发,因此不会显示任何内容。

谢谢

4

5 回答 5

88

如果ViewController是根视图控制器,它就不能从它自己的内部呈现模态视图控制器viewDidLoad,因为此时它没有像屏幕大小这样的信息。

如果其他视图控制器已经显示,这将起作用。如果根视图控制器是 a UINavigationController,您将看到一个视图从右侧滑入,而模态视图从底部向上滑动。

无论如何,对于您ViewController的 ,您最快可以在它变得可见之后呈现它。为此使用计时器是不可靠的;较旧和较慢的设备的加载时间要长得多。

为了获得更高的可靠性,请实施viewDidAppear:for ViewController。仍然使用您的计时器系统来增加额外的延迟;几分之一秒就足够了。尽管viewDidAppear在 iOS 5.1 模拟器中从内部呈现模态视图控制器对我有用,但在加载另一个 ViewController 时呈现模态视图控制器说有时不会发生。

于 2012-04-14T05:55:11.537 回答
4

我已经解决了。我试图从视图中呈现视图确实加载了主视图控制器。不知道为什么它在那里不起作用,但我现在正在设置一个计时器,它调用一个方法来在主视图加载后呈现视图控制器,现在使用它可以正常工作......

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

感谢那些回答的人。

于 2012-04-14T04:52:38.523 回答
4

正如@Dondragmer 所说,如果你想在根视图的viewDidLoad 中展示你的viewController,它将失败。一旦你的viewController 准备好了,你就可以展示你的新viewController。所以,你可以做到这一点

- (void)viewDidLayoutSubviews {
    //present here
}
于 2015-09-05T05:03:46.533 回答
0

我遇到了同样的问题。但我的情况是在另一个 ViewControllerpresentViewController之后调用dismissViewControllerAnimated。我的解决方案是presentViewControllerdismissViewControllerAnimated.

于 2014-07-18T01:13:40.383 回答
-1

呈现一个modalViewController:

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

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

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

于 2012-04-13T21:18:29.760 回答