Tôi muốn thiết lập UIViewController trong một NavigationController lập trình, tuy nhiên phương thức loadView và viewDidLoad không được gọi.loadView của UIViewController không được gọi là
Đây là mã của tôi trong các đại biểu ứng dụng:
MyViewController *viewController = [[MyViewController alloc] init];
UIView *view = [[UIView alloc] initWithFrame:window.frame];
viewController.view = view;
UINavgationController *navController = [[UINavigationController alloc] initWithRootViewController:viewController];
[window addSubview:[navController view];
[window makeKeyAndVisible];
Khi tôi bắt đầu ứng dụng tôi thấy một Navigationbar, nhưng không có cuộc gọi đến loadView. Tôi đang thiếu gì? Tôi nghĩ loadView được gọi sau khi bạn gọi view
Sửa
MyViewController *viewController = [[MyViewController alloc] init];
[viewController view]; // doesn't look right?
UINavgationController *navController = [[UINavigationController alloc] initWithRootViewController:viewController];
[window addSubview:[navController view];
[window makeKeyAndVisible];
sửa đối với bình luận của Giôna, nhưng loadView vẫn không được gọi.
Về nhận xét thứ hai của bạn, chỉ định chế độ xem, bạn có nghĩa là dòng mã thứ 2 và thứ 3 của tôi, phải không? Điều đó có ý nghĩa. Nhưng làm thế nào tôi sẽ gọi getter trong trường hợp này? –
'[viewController view]' gọi getter của khung nhìn nhưng không cần bạn làm điều đó trực tiếp. 'UINavigationController' bạn đã thêm bộ điều khiển xem của mình để gọi hàm getter tại một số điểm để thêm khung nhìn của trình điều khiển của bạn vào hệ thống phân cấp khung nhìn. Bạn có thể chia sẻ việc triển khai bộ điều khiển chế độ xem của mình không? Có vẻ như bạn có điều gì khác đang diễn ra. – Jonah
Về cơ bản, mẫu UIViewController trống từ Xcode, nhưng không có phương thức (xem) nào được gọi ngoài init. Ở đó tôi đã cố gắng thiết lập chế độ xem như sau: - (id) init { \t self ((self = [super init])) { \t UIView * view = [[UIView alloc] initWithFrame: [[UIScreen mainScreen] bounds] ]; \t self.view = view; \t [xem bản phát hành]; \t} trả lại tự; } –