3 回答

TA貢獻1936條經驗 獲得超7個贊
看一看的文檔進行-[UIStoryboard instantiateViewControllerWithIdentifier:]。這使您可以使用在IB屬性檢查器中設置的標識符從情節提要中實例化視圖控制器:
編輯以添加示例代碼:
UIStoryboard *mainStoryboard = [UIStoryboard storyboardWithName:@"MainStoryboard"
bundle: nil];
MyViewController *controller = (MyViewController*)[mainStoryboard
instantiateViewControllerWithIdentifier: @"<Controller ID>"];

TA貢獻1780條經驗 獲得超1個贊
如果使用XCode5,則應以其他方式進行。
選擇你UIViewController的UIStoryboard
轉到Identity Inspector右上方窗格中的
選中Use Storyboard ID復選框
在Storyboard ID字段中寫入唯一的ID
然后編寫您的代碼。
// Override point for customization after application launch.
if (<your implementation>) {
UIStoryboard *mainStoryboard = [UIStoryboard storyboardWithName:@"Main"
bundle: nil];
YourViewController *yourController = (YourViewController *)[mainStoryboard
instantiateViewControllerWithIdentifier:@"YourViewControllerID"];
self.window.rootViewController = yourController;
}
return YES;

TA貢獻1963條經驗 獲得超6個贊
通常,系統應使用情節提要處理視圖控制器實例化。您想要的是通過獲取對的引用來遍歷viewController層次結構,self.window.rootViewController而不是初始化視圖控制器,如果正確設置了故事板,則應該已經正確初始化了。
因此,假設您rootViewController是一個UINavigationController,然后要向其頂部視圖控制器發送內容,則可以在AppDelegate的控件中執行以下操作didFinishLaunchingWithOptions:
UINavigationController *nav = (UINavigationController *) self.window.rootViewController;
MyViewController *myVC = (MyViewController *)nav.topViewController;
myVC.data = self.data;
在Swift中,如果非常相似:
let nav = self.window.rootViewController as! UINavigationController;
let myVC = nav.topViewController as! MyViewController
myVc.data = self.data
除非您要繞過加載故事板的常規方法并自己加載整個故事板,否則您實際上不應該使用應用程序委托中的故事板ID初始化視圖控制器。如果必須從AppDelegate初始化場景,則很可能是在做一些錯誤的事情。我的意思是想象一下,由于某種原因,您想將數據發送到堆棧中的視圖控制器,AppDelegate不應進入視圖控制器堆棧以設置數據。那不是它的事。它的業務是rootViewController。讓rootViewController處理自己的孩子!因此,如果我通過在info.plist文件中刪除對其進行的引用來繞過系統正常的情節提要加載過程,則最多使用以下方法實例化rootViewController:instantiateViewControllerWithIdentifier:,如果是容器,例如UINavigationController,則可能是其根。您要避免的是實例化已由情節提要實例化的視圖控制器。我看到的這個問題很多。簡而言之,我不同意接受的答案。除非張貼者打算從info.plist中刪除故事板的加載,否則這是不正確的,因為否則您將加載2個故事板,這是沒有意義的??赡懿皇莾却嫘孤?,因為系統初始化了根場景并將其分配給窗口,但是隨后您又來實例化它并再次分配它。您的應用程序開局非常糟糕!
- 3 回答
- 0 關注
- 729 瀏覽
添加回答
舉報