iOS - ViewController 类型为 MyCustomViewController
iOS - ViewController of type MyCustomViewController
我有我的 ViewController,MyWebViewController
,我使用 webView
,在 xib 中创建。 .h
文件有
@interface MyWebViewController : UIViewController
@property (nonatomic,strong) IBOutlet UIWebView* webView;
在 .m
文件中,
- (void)viewDidLoad {
[super viewDidLoad];
[self.webView loadRequest:[NSURLRequest requestWithURL:[[NSURL alloc] initWithString:@"http://www.google.com"]]];
}
这是我的xib
它非常适合我。
稍后我创建了另一个 ViewController、RootViewController
类型 MyWebViewController
。
#import "MyWebViewController.h"
@interface RootViewController : MyWebViewController
MyViewViewController
的 xib 已按预期加载,但 webView
未加载到 xib。我花了更多时间进行调试。
后来,我从 xib 中删除了 webView
并以编程方式创建了它。
self.webView = [[UIWebView alloc] initWithFrame:CGRectMake(0, 0, 320, 441)];
self.webView.delegate = self;
[self.webView loadRequest:[NSURLRequest requestWithURL:[[NSURL alloc] initWithString:@"http://www.google.com"]]];
[self.view addSubview:self.webView];
以编程方式创建 webView 会给出预期的输出。
我需要澄清一点,为什么我的 webView
在 xib 中创建时未加载,而在以编程方式创建时工作正常?
在您的 RootViewController 中,您是否调用了:
- (void)viewDidLoad {
[super viewDidLoad];
}
这样它会触发基础 class 函数并且 webView 会正常加载。你忘了把它也放在 MyWebViewController
中。
编辑:
self.webView
未在派生 class 中加载的原因是因为它被标记为 IBOutlet
,因此它需要来自 UIView
的预分配元素的引用或xib
并且在派生的 class 中,我们 不是 实例化基本视图文件,例如 MyWebViewController.xib
。所以 self.webView
出现 nil 并且对 nil 的函数调用被默默地忽略。所以,一旦你通过代码完成它,它就独立于 xib 文件并且可以工作。
希望对您有所帮助!
这是由于 iOS9 视图加载行为发生了变化。开发人员应该更新 -viewWillLayoutSubviews
或 -viewDidAppear
中的 UI 元素。
我有我的 ViewController,MyWebViewController
,我使用 webView
,在 xib 中创建。 .h
文件有
@interface MyWebViewController : UIViewController
@property (nonatomic,strong) IBOutlet UIWebView* webView;
在 .m
文件中,
- (void)viewDidLoad {
[super viewDidLoad];
[self.webView loadRequest:[NSURLRequest requestWithURL:[[NSURL alloc] initWithString:@"http://www.google.com"]]];
}
这是我的xib
它非常适合我。
稍后我创建了另一个 ViewController、RootViewController
类型 MyWebViewController
。
#import "MyWebViewController.h"
@interface RootViewController : MyWebViewController
MyViewViewController
的 xib 已按预期加载,但 webView
未加载到 xib。我花了更多时间进行调试。
后来,我从 xib 中删除了 webView
并以编程方式创建了它。
self.webView = [[UIWebView alloc] initWithFrame:CGRectMake(0, 0, 320, 441)];
self.webView.delegate = self;
[self.webView loadRequest:[NSURLRequest requestWithURL:[[NSURL alloc] initWithString:@"http://www.google.com"]]];
[self.view addSubview:self.webView];
以编程方式创建 webView 会给出预期的输出。
我需要澄清一点,为什么我的 webView
在 xib 中创建时未加载,而在以编程方式创建时工作正常?
在您的 RootViewController 中,您是否调用了:
- (void)viewDidLoad {
[super viewDidLoad];
}
这样它会触发基础 class 函数并且 webView 会正常加载。你忘了把它也放在 MyWebViewController
中。
编辑:
self.webView
未在派生 class 中加载的原因是因为它被标记为 IBOutlet
,因此它需要来自 UIView
的预分配元素的引用或xib
并且在派生的 class 中,我们 不是 实例化基本视图文件,例如 MyWebViewController.xib
。所以 self.webView
出现 nil 并且对 nil 的函数调用被默默地忽略。所以,一旦你通过代码完成它,它就独立于 xib 文件并且可以工作。
希望对您有所帮助!
这是由于 iOS9 视图加载行为发生了变化。开发人员应该更新 -viewWillLayoutSubviews
或 -viewDidAppear
中的 UI 元素。