2012-01-19 33 views
0

我是iOS開發新手,我想知道是否可以從UIView內部訪問UIView如何訪問UIView內部的UIView

我目前的設置是,我有一個主UIViewControllerUIView。在那個UIView我有一個較小的UIView,我用它來顯示調試信息。我想要做的是能夠以某種方式訪問​​該視圖,以便在需要時可以查看/隱藏它,或者如果我正在嘗試調試邏輯錯誤,則可以更改背景顏色。

我試圖使用self.view來訪問它,但那只是給了我父視圖。我已經在各種網站和教程中看到我需要將它添加到子視圖中並從那裏開始工作,但是當我這樣做時視圖設置爲0x0。我還看到我需要使用IBOutlet,並且在IB中我需要在某處引用它,但我不知道如何執行該操作,因爲我沒有看到我的對象,我在控制器的頭文件中定義了IB中的任何位置。

任何意見將不勝感激。

回答

4

如果你想通過IB來訪問你的第二個UIView的:

  • 確保它在Interface Builder添加到您的根視圖
  • 在您的視圖控制器創建一個出口與@property (nonatomic, retain) IBOutlet UIView *myView(當然,合成它)
  • 將視圖連接到您在界面生成器中的文件所有者中新創建的插座
  • 瞧!應適用於現在 - 只需訪問您的看法與self.myView(如果一切是正確的,這將有非零值)
+0

+1簡潔的回答 – Sam

+0

完美!非常感謝。我甚至不知道我可以用文件所有者來做到這一點。 – Seb

1

最簡單的方法是在您的ViewController的.h文件中設置IBOutlet,然後將該嵌入的視圖(或子視圖)連接到該IBOutlet。

然後,您可以隨時爲其設置hidden屬性。

檢查出this Apple documentation,它描述瞭如何使用Xcode 4設計用戶界面,特別注意「直接與源代碼建立連接」部分。

+0

+1儘管試圖解釋它,但我認爲文檔只是您指出的最佳觀看和學習場所。也許一個視頻也可能有幫助。 – Sam

+0

雖然視頻會幫助很多。在辦公室看一個人有點難。 – Seb

0

看一看的documentation for UIView。你會發現有很多方法可以讓你訪問視圖的內容。例如,有subviews屬性,它提供了所有視圖子視圖的數組。還有一個-viewWithTag:方法會返回一個指向具有指定標籤的子視圖的指針。 (您可以在Interface Builder中將視圖標籤設置爲任何您喜歡的內容。)

如果視圖層次結構是在.xib文件或故事板中創建的,那麼訪問層次結構各個成員的常用方法是在您的控制器中創建插座(標記爲IBOutlet的屬性),並將這些插座連接到.xib中的相應視圖。當加載.xib時,插座將被填充正確的視圖指針。

0

如果您在代碼中創建子視圖,你會希望孩子UIView的設置frame(原點&大小),做[self.view addSubview:myChildView]。您可以使用財產或伊維爾跟蹤此uiview,以便稍後參考它以隱藏它。

如果您使用的是xib文件,並且您在xib中定義了子視圖,那麼您很可能需要定義一個IBOutlet來引用該元素。喜歡的東西:

@property (nonatomic, retain) IBOutlet UIView * myChildView; 

您的實現裏面,你會想:

@implementation MyCoolViewController 

@synthesize myChildView = _myChildView; 

-(void) dealloc 
{ 
    // make sure to release reference so the property gets cleaned up 
    [_myChildView release], _myChildView = nil; 
    [super dealloc]; 
} 

-(void)someFunc 
{ 
    self.myChildView.hidden = YES; // or NO 
} 

內部接口生成器,你需要到出口分配給你的廈門國際銀行的一些看法。典型的做法是選擇「Owner」,然後在Connections Inspector中單擊屬性名稱並將其拖到要分配給它的UIView。

1

給出的答案是好,這裏是另一種方法:給視圖中的代碼(int類型,例如「1」),後來像這樣訪問它:

UIView * viewToGet = [theMainView viewWithTag:1] 

可以在IB分配標籤以及代碼中。