我将一个工作 View Controller 类从另一个项目复制到一个新项目中。我无法在新项目中加载 View 。在旧项目中我使用了presentModalViewController。在新版本中,我无法使用presentModalViewController或presentViewController加载 View
我正在尝试从主视图 Controller 加载当前 View 。
这是我的主视图 Controller 界面的样子...
// 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];
像这样呈现ViewController...
RequestDialogViewController *requestIPViewController = [[RequestDialogViewController alloc] initWithNibName:@"RequestDialogViewController" bundle:nil];
[self presentViewController:requestIPViewController animated:YES completion:nil];
我在新项目中缺少什么? init 方法会触发,但 viewDidLoad 不会触发,并且不会显示任何内容。
谢谢
最佳答案
如果 ViewController
是 Root View Controller ,它无法从自己的 viewDidLoad
中呈现模态视图 Controller ,因为此时它没有信息比如屏幕尺寸。
如果其他 View Controller 已经显示,这将起作用。如果 Root View Controller 是 UINavigationController,您将看到一个 View 从右侧滑入,而模态视图从底部向上滑动。
无论如何,对于您的ViewController
,您最快可以在它变得可见之后呈现它。为此使用计时器是不可靠的;较旧且速度较慢的设备的加载时间显着延长。
为了提高可靠性,请为 ViewController
实现 viewDidAppear:
。仍然使用您的计时器系统来添加额外的延迟;不到一秒就足够了。尽管在 iOS 5.1 模拟器中从 viewDidAppear
中呈现模态视图 Controller 对我来说很有效,Presenting a modal view controller when loading another ViewController说有时不会发生。
关于iphone - 无法让presentViewController 工作,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/10147625/