以编程方式覆盖 loadView 和设置 rootViewController,没有 Storyboard
Posted
技术标签:
【中文标题】以编程方式覆盖 loadView 和设置 rootViewController,没有 Storyboard【英文标题】:Overriding loadView and setting rootViewController programmatically, no Storyboard 【发布时间】:2014-11-22 01:20:01 【问题描述】:我正在尝试以编程方式创建并设置View
作为根View
。我没有使用 Storyboard 或 ARC。
我正在尝试将UIWebView
设置为我的ViewController's
根View
,但我无法做到。当我运行以下代码时,我看到一个带有空白屏幕的NavigationBar
。我尝试将常规UIView
设置为根View
,并将其背景颜色设置为蓝色,它已加载,因此问题似乎特定于UIWebView
。
如果有人能指出我做错了什么,我将不胜感激。谢谢!
这是我的loadView
代码:
// in GmailOAuthViewController.m
- (void)loadView
CGRect frame = [[UIScreen mainScreen] bounds];
UIWebView *webView = [[[UIWebView alloc] initWithFrame:frame] autorelease];
self.view = webView;
这是我的application:didFinishLaunchingWithOptions:
代码:
- (BOOL)application:(UIApplication *)application didFinishLaunchingWithOptions:(NSDictionary *)launchOptions
CGRect frame = [[UIScreen mainScreen] bounds];
UIViewController *viewController = [[GmailOAuthViewController alloc] init];
self.navigationController = [[UINavigationController alloc] initWithRootViewController:viewController];
self.window = [[UIWindow alloc] initWithFrame:frame];
self.window.backgroundColor = [UIColor whiteColor];
self.window.rootViewController = self.navigationController;
[self.window makeKeyAndVisible];
return YES;
【问题讨论】:
【参考方案1】:您正在分配 self.view... 如果您分配 webView 查看其他所有内容 试试
[self.view addSubview: webView]
这是我刚刚尝试过的代码,它可以工作
CGRect frame = [[UIScreen mainScreen] bounds];
UIViewController *viewController = [[ViewController alloc] init];
UINavigationController *navigationController = [[UINavigationController alloc] initWithRootViewController:viewController];
self.window = [[UIWindow alloc] initWithFrame:frame];
self.window.backgroundColor = [UIColor whiteColor];
self.window.rootViewController = navigationController;
[self.window makeKeyAndVisible];
在 ViewController.m 中
-(void)viewDidAppear:(BOOL)animated
CGRect frame = self.view.bounds;
UIWebView *webView = [[UIWebView alloc] initWithFrame:frame] ;
webView.delegate = self;
self.view = webView;
NSString *thePath = [[NSBundle mainBundle] pathForResource:@"ViewControllerCatalog" ofType:@"pdf"];
if (thePath)
NSData *pdfData = [NSData dataWithContentsOfFile:thePath];
[(UIWebView *)self.view loadData:pdfData MIMEType:@"application/pdf"
textEncodingName:@"utf-8" baseURL:nil];
对不起,我之前告诉过你错了,你实际上分配给查看
【讨论】:
您好,感谢您的回复。如果我进行更改,则屏幕永远不会从版权屏幕过渡。除了UIWebView
之外,我没有创建任何父视图,并且没有使用情节提要。我想将它设置为根View
并以编程方式显示它。
上面的代码可以工作,我只是将具有该名称的 pdf 放入 Xcode 中,一切都很好。我猜您的导航控制器属性干扰了现有属性
谢谢,我自己乱来,发现UIWebView类没有地址栏,所以我无法识别为UIWebview。以上是关于以编程方式覆盖 loadView 和设置 rootViewController,没有 Storyboard的主要内容,如果未能解决你的问题,请参考以下文章
iOS UITableView 在设置 TableHeaderView 后以编程方式覆盖自动布局约束
以编程方式设置为根视图控制器时,视图控制器无法正确显示子视图
在 -init 或 -loadview 中初始化视图(按钮、标签等)
在android中以编程方式覆盖文本到语音设置中的“始终使用我的设置”选项