第七色在线视频,2021少妇久久久久久久久久,亚洲欧洲精品成人久久av18,亚洲国产精品特色大片观看完整版,孙宇晨将参加特朗普的晚宴

為了賬號(hào)安全,請(qǐng)及時(shí)綁定郵箱和手機(jī)立即綁定
已解決430363個(gè)問(wèn)題,去搜搜看,總會(huì)有你想問(wèn)的

故事板-請(qǐng)參閱AppDelegate中的ViewController

故事板-請(qǐng)參閱AppDelegate中的ViewController

catspeake 2019-10-24 14:25:39
請(qǐng)考慮以下情形:我有一個(gè)基于情節(jié)提要的應(yīng)用程序。我將一個(gè)ViewController對(duì)象添加到情節(jié)提要中,將此ViewController的類(lèi)文件添加到項(xiàng)目中,并在IB身份檢查器中指定新類(lèi)的名稱?,F(xiàn)在,我該如何從AppDelegate以編程方式引用此ViewController?我已經(jīng)在相關(guān)類(lèi)中創(chuàng)建了一個(gè)變量,并將其轉(zhuǎn)換為IBOutlet屬性,但是我看不到任何能夠在代碼中引用新ViewController的方法-嘗試ctrl拖動(dòng)連接不起作用。即在AppDelegate中,我可以像這樣進(jìn)入基本的ViewController(MyViewController*) self.window.rootViewController但是情節(jié)提要中包含的其他ViewController怎么樣?
查看完整描述

3 回答

?
LEATH

TA貢獻(xiàn)1936條經(jīng)驗(yàn) 獲得超7個(gè)贊

看一看的文檔進(jìn)行-[UIStoryboard instantiateViewControllerWithIdentifier:]。這使您可以使用在IB屬性檢查器中設(shè)置的標(biāo)識(shí)符從情節(jié)提要中實(shí)例化視圖控制器:

編輯以添加示例代碼:


UIStoryboard *mainStoryboard = [UIStoryboard storyboardWithName:@"MainStoryboard"

                                                         bundle: nil];


MyViewController *controller = (MyViewController*)[mainStoryboard 

                    instantiateViewControllerWithIdentifier: @"<Controller ID>"];



查看完整回答
反對(duì) 回復(fù) 2019-10-24
?
慕神8447489

TA貢獻(xiàn)1780條經(jīng)驗(yàn) 獲得超1個(gè)贊

如果使用XCode5,則應(yīng)以其他方式進(jìn)行。


選擇你UIViewController的UIStoryboard

轉(zhuǎn)到Identity Inspector右上方窗格中的

選中Use Storyboard ID復(fù)選框

在Storyboard ID字段中寫(xiě)入唯一的ID

然后編寫(xiě)您的代碼。


// 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;


查看完整回答
反對(duì) 回復(fù) 2019-10-24
?
神不在的星期二

TA貢獻(xiàn)1963條經(jīng)驗(yàn) 獲得超6個(gè)贊

通常,系統(tǒng)應(yīng)使用情節(jié)提要處理視圖控制器實(shí)例化。您想要的是通過(guò)獲取對(duì)的引用來(lái)遍歷viewController層次結(jié)構(gòu),self.window.rootViewController而不是初始化視圖控制器,如果正確設(shè)置了故事板,則應(yīng)該已經(jīng)正確初始化了。


因此,假設(shè)您rootViewController是一個(gè)UINavigationController,然后要向其頂部視圖控制器發(fā)送內(nèi)容,則可以在AppDelegate的控件中執(zhí)行以下操作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

除非您要繞過(guò)加載故事板的常規(guī)方法并自己加載整個(gè)故事板,否則您實(shí)際上不應(yīng)該使用應(yīng)用程序委托中的故事板ID初始化視圖控制器。如果必須從AppDelegate初始化場(chǎng)景,則很可能是在做一些錯(cuò)誤的事情。我的意思是想象一下,由于某種原因,您想將數(shù)據(jù)發(fā)送到堆棧中的視圖控制器,AppDelegate不應(yīng)進(jìn)入視圖控制器堆棧以設(shè)置數(shù)據(jù)。那不是它的事。它的業(yè)務(wù)是rootViewController。讓rootViewController處理自己的孩子!因此,如果我通過(guò)在info.plist文件中刪除對(duì)其進(jìn)行的引用來(lái)繞過(guò)系統(tǒng)正常的情節(jié)提要加載過(guò)程,則最多使用以下方法實(shí)例化rootViewController:instantiateViewControllerWithIdentifier:,如果是容器,例如UINavigationController,則可能是其根。您要避免的是實(shí)例化已由情節(jié)提要實(shí)例化的視圖控制器。我看到的這個(gè)問(wèn)題很多。簡(jiǎn)而言之,我不同意接受的答案。除非張貼者打算從info.plist中刪除故事板的加載,否則這是不正確的,因?yàn)榉駝t您將加載2個(gè)故事板,這是沒(méi)有意義的??赡懿皇莾?nèi)存泄漏,因?yàn)橄到y(tǒng)初始化了根場(chǎng)景并將其分配給窗口,但是隨后您又來(lái)實(shí)例化它并再次分配它。您的應(yīng)用程序開(kāi)局非常糟糕!


查看完整回答
反對(duì) 回復(fù) 2019-10-24
  • 3 回答
  • 0 關(guān)注
  • 738 瀏覽

添加回答

舉報(bào)

0/150
提交
取消
微信客服

購(gòu)課補(bǔ)貼
聯(lián)系客服咨詢優(yōu)惠詳情

幫助反饋 APP下載

慕課網(wǎng)APP
您的移動(dòng)學(xué)習(xí)伙伴

公眾號(hào)

掃描二維碼
關(guān)注慕課網(wǎng)微信公眾號(hào)