我有我的ViewController,MyWebViewController
我使用在xib中创建的webView
。 .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
它对我来说很完美。
稍后我创建另一个类型为RootViewController
的ViewController 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中创建时,并且在以编程方式创建时工作正常?
答案 0 :(得分:1)
在 RootViewController 中,您是否致电:
- (void)viewDidLoad {
[super viewDidLoad];
}
这样它会触发基类功能,而 webView 将会加载。你忘了把它放在MyWebViewController
中。
编辑:
self.webView
未在派生类中加载的原因是因为它标记为IBOutlet
所以它需要引用UIView
或xib
中预先分配的元素,在派生类中,我们不实例化基本视图文件,例如MyWebViewController.xib
。所以self.webView
出现nil并且函数调用nil被静默忽略。因此,一旦你通过代码执行它,它就独立于xib文件并且可以工作。
希望它有所帮助!
答案 1 :(得分:0)
这是由于iOS9视图加载行为的变化。开发人员应该更新-viewWillLayoutSubviews
或-viewDidAppear
中的UI元素。