Đối với Universal - iPhone + iPad - ứng dụng bạn có thể chỉ định các NIB khác nhau tải trên mỗi nền tảng, trong bảng thông tin mục tiêu hoặc bằng cách thêm các phím NSMainNibFile~ipad
và NSMainNibFile~iphone
vào Info.plist
. Ngoài ra, bạn có thể thêm MainWindow~ipad.xib
NIB vào mục tiêu của mình, nó sẽ được tải trên iPad thay vì MainWindow.xib
, dựa trên khóa NSMainNibFile
trong Info.plist.
Nếu bạn cần kiểm soát và tùy chỉnh nhiều hơn cho ứng dụng Universal, bạn có thể tải NIB bắt đầu theo cách thủ công. Mẫu dự án "Universal" có bản mẫu cho phương thức này, vì vậy cách nhanh nhất để bắt đầu sử dụng kỹ thuật này là tạo một dự án iOS mới với cấu hình Universal.
Trong các ví dụ trên, Main NIB File
được đặt trong Info.plist
(cài đặt đích) để bạn đã có NIB được nạp khi ủy nhiệm ứng dụng của bạn được gọi. Thông thường trong thiết lập này, đối tượng MyAppDelegate
cũng sẽ được lưu trữ trong NIB (với một số IBOutlets
) và số File's Owner
của NIB sẽ được đặt thành UIApplication
.
Để một dự án phổ quát có thể chứa hai bố cục thay thế, khóa Tệp NIB chính bị bỏ sót khỏi số Info.plist
. Sau đó, nó instantiates đối tượng áp dụng đại biểu lập trình trong UIApplicationMain
:
#import "MYAppDelegate.h"
int main(int argc, char *argv[])
{
@autoreleasepool {
return UIApplicationMain(argc, argv, nil, NSStringFromClass([MYAppDelegate class]));
}
}
Sau đó kiểm tra môi trường và các thiết lập của bạn và tải các NIB thích hợp trong application:DidFinishLaunchingWithOptions:
- (BOOL)application:(UIApplication *)application didFinishLaunchingWithOptions:(NSDictionary *)launchOptions {
_window = [[[UIWindow alloc] initWithFrame:[[UIScreen mainScreen] bounds]] autorelease];
// Override point for customization after application launch.
if ([[UIDevice currentDevice] userInterfaceIdiom] == UIUserInterfaceIdiomPhone) {
_viewController = [[[MYViewController alloc] initWithNibName:@"MYViewController_iPhone" bundle:nil] autorelease];
} else {
_viewController = [[[MYViewController alloc] initWithNibName:@"MYViewController_iPad" bundle:nil] autorelease];
}
_window.rootViewController = _viewController;
[_window makeKeyAndVisible];
return YES;
}
- (void)dealloc {
[_window release];
[_viewController release];
[super dealloc];
}
Bước mới là tạo ra một thư mục gốc MYViewController
bằng tay, bốc NIB thích hợp. Trong thiết lập này, File's Owner
là số MYViewController
mới sáng bóng của bạn thay vì UIApplication
. Nếu bạn muốn, MYViewController
có thể chấp nhận phần lớn những gì bạn có thể đang sử dụng ứng dụng của bạn - thường đóng gói lớp mô hình cốt lõi của ứng dụng, hoạt động như một nguồn dữ liệu và ủy quyền cho các khung nhìn và những thứ khác trong NIB.
Vì vậy, bạn đang dự kiến sẽ có một số gốc UIView
trong NIB, và nó phải được nối với các ổ cắm view
của File's Owner
(MYViewController
).
Lưu ý rằng NIB của MYViewController không thực sự được tải cho đến khi lần đầu tiên truy cập thuộc tính MYViewController.view
. Chỉ sau đó sẽ được gọi là [MyViewController viewDidLoad]
! Thời gian có thể xảy ra nhất là khi bạn thêm nó vào cửa sổ gốc.
Trong mã mẫu được hiển thị phía trên gốc UIWindow
được khởi tạo bởi ứng dụng đại biểu, nhưng không có lý do nào bạn không thể đưa mã vào NIB thay thế. Nếu bạn chọn làm điều này, hãy cẩn thận. Nếu bạn đặt rootViewController
của cửa sổ trong NIB cho chủ sở hữu của Tệp trong trường hợp đó, nó sẽ làm cho khung nhìn của trình điều khiển được thêm vào cửa sổ khi cửa sổ được kích hoạt. Hãy cẩn thận xây dựng NIB đầu tiên trong mọi trường hợp.
Đại biểu ứng dụng không nhất thiết cần phải có tham chiếu đến thư mục gốc UIWindow
nếu bạn muốn MYViewController quản lý nó, nhưng nó có thể sạch hơn để giữ cửa sổ gốc khỏi NIB và quản lý nó trong ủy nhiệm ứng dụng .
Bên ngoài đó (!) Không có nhiều khác biệt so với phương pháp tiếp cận một nền tảng.
đúng !, "didFinishLaunchingWithOptions" là phương pháp đầu tiên để thực thi! –