iOS - MyCustomViewController

时间:2015-07-06 06:30:27

标签: ios objective-c iphone uiviewcontroller

我有我的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 enter image description here

它对我来说很完美。

稍后我创建另一个类型为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中创建时,并且在以编程方式创建时工作正常?

2 个答案:

答案 0 :(得分:1)

RootViewController 中,您是否致电:

- (void)viewDidLoad {
     [super viewDidLoad];
}

这样它会触发基类功能,而 webView 将会加载。你忘了把它放在MyWebViewController中。

编辑:

self.webView未在派生类中加载的原因是因为它标记为IBOutlet所以它需要引用UIViewxib中预先分配的元素,在派生类中,我们实例化基本视图文件,例如MyWebViewController.xib。所以self.webView出现nil并且函数调用nil被静默忽略。因此,一旦你通过代码执行它,它就独立于xib文件并且可以工作。

希望它有所帮助!

答案 1 :(得分:0)

这是由于iOS9视图加载行为的变化。开发人员应该更新-viewWillLayoutSubviews-viewDidAppear中的UI元素。