iOS - ViewController типа 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"]]];
}

Вот мой хиб

Это прекрасно работает для меня.

Позже я создаю еще один ViewController, RootViewController типа MyWebViewController,

#import "MyWebViewController.h"

@interface RootViewController : MyWebViewController

Ксиб оф MyViewViewController загружается, как и ожидалось, но webView не загружается в xib. Я провел больше времени в отладке.

Позже я удалил webView из XIB и создал его программно.

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 ответа

Решение

Это было связано с изменением поведения загрузки представления iOS9. Разработчик должен обновить элементы пользовательского интерфейса в -viewWillLayoutSubviews или же -viewDidAppear,

В вашем RootViewController вы вызывали:

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

Таким образом, он вызовет функцию базового класса и webView будет загружаться ожидаемым образом. Вы забыли положить это в MyWebViewController также.

РЕДАКТИРОВАТЬ:

Причина self.webView не получает нагрузку в производном классе, потому что он помечен IBOutlet поэтому ему нужна ссылка на предварительно выделенный элемент из UIView или же xib и в производном классе мы не являемся базовым файлом вида, например, MyWebViewController.xib, Так self.webView появляется ноль и вызов функции на ноль игнорируется молча. Итак, когда вы делаете это по коду, он не зависит от xib-файла и работает.

Надеюсь, поможет!

Другие вопросы по тегам