2011-11-06 27 views
11

Tôi có một giao thức mà ApplicationDelegate của tôi triển khai. Tôi muốn chuyển điều này cho bộ điều khiển xem đầu tiên được định nghĩa trong bảng câu chuyện. Làm cách nào để tôi có quyền truy cập vào nó từ phương pháp?UIStoryBoard có bộ điều khiển xem đầu tiên từ ApplicationDelegate

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

Trả lời

21

Tôi không chắc liệu tôi có hiểu đúng câu hỏi hay không Tôi nghĩ bạn đang hỏi làm cách nào để bạn có được viewController đầu tiên trong bảng phân cảnh. Để có được điều này bạn gọi,

UIStoryboard *storybord = [UIStoryboard storyboardWithName:@"MainStoryboard" bundle:nil]; 
UIViewController *vc =[storybord instantiateInitialViewController]; 

Thay đổi tên của kịch bản cho phù hợp với tên của bạn, MainStoryboard chỉ là tên mặc định. Hy vọng đây là những gì bạn đang tìm kiếm.

Edit:

- (BOOL)application:(UIApplication *)application didFinishLaunchingWithOptions:(NSDictionary *)launchOptions 
{ 
    UIStoryboard *storybord = [UIStoryboard storyboardWithName:@"MainStoryboard" bundle:nil]; 
    UIViewController *vc =[storybord instantiateInitialViewController]; 
    //set the delegate on the view controller that you have loaded 
    // Override point for customization after application launch. 
    return YES; 
} 
+0

vì đó là những gì tôi cần. bất kỳ ý tưởng về làm thế nào để tải bảng phân cảnh chính xác cho các thiết bị trong một ứng dụng phổ quát (iphone vs ipad)? –

+0

Điều này sẽ làm điều đó 'UIViewController * vc; nếu (UI_USER_INTERFACE_IDIOM() == UIUserInterfaceIdiomPad) { UIStoryboard * storybord = [Bảng câu chuyện UIStoryboardWithName: @ "MainiPadStoryboard" bundle: nil]; vc = [storybord instantiateInitialViewController]; } else { UIStoryboard * storybord = [Bảng câu chuyện UIStoryboardWithName: @ "MainiPhoneStoryboard" bundle: nil]; vc = [storybord instantiateInitialViewController]; } ' –

+11

Khá chắc chắn đây là lấy một bản sao mới, không phải bản sao hiện có. –

15

Thay sau đó tạo ra bản sao mới của kịch bản hiện tại của bạn sử dụng

UIStoryboard *storybord = [UIStoryboard storyboardWithName:@"MainStoryboard" bundle:nil]; 

bạn có thể đặt trong tập tin tiêu đề đại biểu ứng dụng của bạn sở hữu

@property (nonatomic, weak) UIViewController* initialViewController; 

và trong này phương thức này chỉ đơn giản gán self.window.rootViewController cho thuộc tính

- (BOOL)application:(UIApplication *)application didFinishLaunchingWithOptions:(NSDictionary *)launchOptions 
{ 
    self.initialViewController = self.window.rootViewController; 

    return YES; 
} 

Điều này sẽ hoạt động, vì thuộc tính cửa sổ của giao thức đại biểu ứng dụng là quyền truy cập vào rootViewConroller và bộ điều khiển này là initialViewController nếu sử dụng bảng phân cảnh.

+0

Tính năng này hoạt động và là câu trả lời đúng; instantiating một bộ điều khiển mới không giống như trỏ đến một đã instantiated từ storyboard. – Wizfinger

+0

Có, đây phải là câu trả lời được chấp nhận. – Martin

-1

Thực hiện Swift 2.0 cho những ai muốn.

Bạn có thể phải sửa đổi định danh chế độ xem STROYBAORD và bộ điều khiển. Ngoài ra o

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

     let storyboard: UIStoryboard = UIStoryboard(name: "[STORYBOARD NAME]", bundle: nil) 
     let viewController:UIViewController = storyboard.instantiateViewControllerWithIdentifier("[CONTROLLER IDENTIFIER]") // You have replace UIViewController with you customer controll type 


     self.window?.rootViewController = viewController 
     self.window?.makeKeyAndVisible() 

     return true 
    } 
+0

cố gắng hiểu vấn đề thay vì chỉ chuyển đổi câu trả lời được chấp nhận thành nhanh chóng ... – Martin

+0

@Martin Tôi đã chỉnh sửa câu trả lời.Hy vọng ngay cả một người mới bắt đầu IOS cũng có thể hiểu ngay bây giờ. –

+0

nhưng giải pháp của bạn tạo bộ điều khiển chế độ xem mới trong khi @aran đang tìm kiếm giải pháp để có bộ điều khiển chế độ xem đầu tiên hiện tại. Câu trả lời hiện được chấp nhận không phải là câu trả lời hay. – Martin

Các vấn đề liên quan