2011-04-15 75 views
2

當創建一個UIViewController和相應的nib文件時,該nib文件通常與控制器名稱相同,但可以重命名。那麼,IB如何知道這個nib文件引用了哪個UIViewControllernib文件如何知道文件的所有者控制器

當從引用出口或動作拖拽時,IB僅顯示特定控制器的方法。它是如何選擇的?當重新命名筆尖時,我想知道IB是否保存了筆尖和UIViewController之間的連接。

難道我腦子裏似乎有太多的困惑嗎?如果打開IB並在檢查窗口來回選項卡檢查文件所有者的類,那麼在這裏你可以看到類名:)希望不是......

問候, FAK

+2

可能重複的[關於IB代理討論對象(http://stackoverflow.com/questions/789251/is-there-an-easy-to-understand-guide-new-to-cocoa -xcode-等換接口-BUI)和[什麼介紹了「文件的所有者」最好在Objective-C /古柯筆尖?](http://stackoverflow.com/questions/598082/what-describes-the-files -owner-最佳的目標-C-可口可樂筆尖) – 2011-04-15 09:53:31

+1

[可可:什麼是「文件的所有者」在筆尖(http://crazyviraj.blogspot.com/2009/05/cocoa-what-is -files-owner-in-nib.html)有一個很好的解釋。 – 2011-04-15 09:56:17

回答

3

enter image description here

+0

@saadnib,我會說這是班級名稱。 – 2011-04-15 09:51:42

+0

是它的一個類名......對不起。 – saadnib 2011-04-15 09:54:13

+0

嗨,我正在使用xcode 4 ...那是哪裏?你可以上傳截圖因爲我沒有看到它:(我想我是盲目的:) – Fakada 2011-04-15 10:19:29

2

nib文件不一定需要知道UIViewController的哪個特定子類是其文件的所有者。需要注意的是視圖控制器擁有的筆尖負荷(通常)分兩步進行:

  1. (的子類)UIViewController被實例化
  2. 該實例接收-initWithNibName:bundle:,從而意識到筆尖文件的一個實例是應該加載,實例成爲nib文件的所有者。

所以它是UIViewController(或它的一個子類)實例,需要知道nib文件名,但反過來不一定是真的。

也就是說,UIViewController的子類通常定義nib文件中對象的出口並接收動作。爲了在Xcode/Interface Builder中連接插座和操作,您需要將身份檢查器中的文件所有者類設置爲相應的子類UIViewController

1

我知道這是一個老問。在這裏分享我的理解。

比方說,我們在XCode中創建UIViewController的子類,並將其命名爲SecondViewController,其默認情況下其xib文件名將爲SecondViewController.xib。然後讓我們先看看如何創建這個VC,然後討論文件的所有者是什麼。

  1. 創建和筆尖名稱顯示SecondViewController:讓我們用initWithNibName創建VC:捆:用指定的廈門國際銀行的名稱,代碼可以是這樣的:

    SecondViewController * vc = [[SecondViewController alloc] initWithNibName:@"SecondViewController" bundle:nil]; 
    [self presentViewController:vc animated:YES completion:nil]; 
    
  2. 創建和顯示SecondViewController無筆尖名:如果一切是在默認情況下,這意味着VC具有相同的類名作爲廈門國際銀行文件名,然後我們可以忽略筆尖名,創造了VC的代碼可以是這樣的:

    SecondViewController * vc = [[SecondViewtController alloc] init]; 
    [self presentViewController:vc animated:YES completion:nil]; 
    
  3. 創建和顯示SecondViewController用不同的廈門國際銀行的文件名:如果重命名XIB文件名,則必須在創建VC指定的廈門國際銀行文件的名稱,代碼可以是這樣的:

    SecondViewController * vc = [[SecondViewController alloc] initWithNibName:@"SecondViewController2" bundle:nil]; 
    [self presentViewController:vc animated:YES completion:nil]; 
    
  4. 什麼是文件的所有者?首先,正如蘋果所說,它是一個佔位符對象。該對象是xib文件中定義的對象的容器。另外,這個對象可以接收由xib中的對象發送的消息,例如按鈕點擊消息。當您創建插座或動作時,其目標將是文件的所有者,但在設計時此對象不明。在界面生成器中,如下所示: File's Owner as the target of the action

  5. 什麼是文件所有者?其次,它是界面構建器中顯示的類名稱。這個類的實例包含在xib中定義的對象。它顯示如下: enter image description here

  6. 如果我沒有爲文件所有者設置類名?在這種情況下,IB將不會允許您創建通過控制拖動一個出口或行動,因爲它不知道誰將會包含出口或動作。

  7. 如果我刪除了文件的所有者類的名字後,我創建出口或行動?可以刪除IB中的類名稱。您創建代碼將像以前一樣運行良好。

  8. 讓我們回到這個問題:「如何nib文件的知道它的文件的所有者控制器」?

    • 在設計階段,IB只有在設置文件所有者的類名後才知道所有者控制器;
    • 在運行時,運行時設置誰收到init或initWithNibName對象:包:隨着筆尖的文件的所有者對象。
相關問題