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-файла и работает.
Надеюсь, поможет!