2013-05-22 24 views
58

Khi tôi tạo ra một ứng dụng xem đĩa đơn mới trong XCode 4.6 sử dụng kịch bản, chúng ta có thể thấy rằng các chức năng chính tạo ra một ứng dụng mới sử dụng các đại biểu ứng dụng như thế này:XCode tải bảng phân cảnh chính như thế nào?

return UIApplicationMain(argc, argv, nil, NSStringFromClass([MyAppDelegate class])); 

Tuy nhiên, nếu chúng ta nhìn vào MyAppDelegate.h và MyAppDelegate.m, không có nơi nào trong mã tham chiếu MainStoryboard.storyboard. Điều này khác với phiên bản không phải bảng phân cảnh, nơi chúng tôi có thể tìm thấy dòng mã tải tệp nib theo chương trình.

Câu hỏi của tôi là, bảng phân cảnh được tải như thế nào? (Nơi tôi nên chọc để tìm nó?)

Cảm ơn

Trả lời

69

Nhìn vào thiết lập mục tiêu của bạn cho Dự án

enter image description here

Chú ý các thiết lập chính Storyboard.

Nếu bạn muốn tự mình thực hiện việc này, bạn sẽ làm điều gì đó tương tự.

- (BOOL)application:(UIApplication *)application didFinishLaunchingWithOptions:(NSDictionary *)launchOptions 
{ 

    UIStoryboard *storyboard = [UIStoryboard storyboardWithName:@"MainStoryboard" bundle:[NSBundle mainBundle]]; 
    UIViewController *vc = [storyboard instantiateInitialViewController]; 

    // Set root view controller and make windows visible 
    self.window.rootViewController = vc; 
    [self.window makeKeyAndVisible]; 

    return YES; 
} 
+0

Cảm ơn! Điều này trả lời câu hỏi của tôi – agro1986

+0

Bạn được chào đón, nếu vậy bạn nên đánh dấu câu hỏi đó là được chấp nhận để đóng câu hỏi. –

+0

Xong! Không biết làm thế nào để làm điều đó :) – agro1986

7

Nó được bắt đầu từ UIMainStoryboardFile thiết lập từ file info.plist của bạn. Xcode sau đó tạo một cửa sổ chính, khởi tạo bộ điều khiển xem đầu tiên của bạn và thêm nó vào cửa sổ. Bạn vẫn có thể làm điều này trong mã tương tự như .nib sử dụng

UIStoryboard* storyboard = [UIStoryboard storyboardWithName:@"MainStoryboard" bundle:nil]; 
UIViewController* initialView = [storyboard instantiateInitialViewController]; 
+0

thanks a lot cho mã! – agro1986

9

tặng một cái nhìn vào UIApplicationMain thảo luận:

Thảo luận
Chức năng này instantiates đối tượng áp dụng từ lớp gốc và instantiates các đại biểu (nếu có) từ lớp nhất định và tập hợp đại biểu cho ứng dụng. Nó cũng thiết lập vòng lặp sự kiện chính, bao gồm vòng lặp chạy của ứng dụng và bắt đầu xử lý các sự kiện. Nếu tệp Info.plist của ứng dụng chỉ định tệp nib chính cần tải, bằng cách bao gồm khóa NSMainNibFile và tên tệp nib hợp lệ cho giá trị, hàm này sẽ tải tệp nib đó.

Khi UIApplicationMain được gọi, một file plist có chứa tất cả các thông tin ứng dụng được nạp:

enter image description here

Đó là cách nó "hiểu" rằng xib/tập tin kịch bản cần phải được nạp.

+0

Cảm ơn bạn rất nhiều! – agro1986

3

Nếu bạn muốn nhanh chóng với Swift

var storyboard = UIStoryboard(name: "Main", bundle: NSBundle.mainBundle()) 
var vc : AnyObject! = storyboard.instantiateInitialViewController() 
self.window!.rootViewController = vc as UIViewController 
self.window!.makeKeyAndVisible() 
+3

Nếu bạn muốn khởi tạo bảng phân cảnh trong phương thức 'applicationDidFinishLoading' trong' AppDelegate', bạn cũng phải tạo đối tượng 'window'. Ví dụ như này 'cửa sổ = UIWindow (khung: UIScreen.mainScreen(). Giới hạn)' –

+0

bạn nên sử dụng cho phép thay vì var và sử dụng? thay vì ! (ngay cả khi bạn chắc chắn), không có hình phạt thực sự cho nó –

0

Bit muộn để dự buổi tiệc nhưng bạn có thể tới các viewController từ cửa sổ như hình dưới đây

@UIApplicationMain 
class AppDelegate: UIResponder, UIApplicationDelegate { 

    var window: UIWindow? 

    func application(application: UIApplication, didFinishLaunchingWithOptions launchOptions: [NSObject: AnyObject]?) -> Bool { 

     var viewController = window?.rootViewController as? ViewController 
     if let viewController = viewController { 
      // do awesome stuff 
     } 

     return true 
    } 
} 
2

Trong Xcode, con người có thể đọc được Thông tin.phần plist xác định các kịch bản chính là:

Main storyboard file base name

Trong văn bản đơn giản, chính là UIMainStoryboardFile:

<key>UIMainStoryboardFile</key> 
<string>Main</string> 
Các vấn đề liên quan