簡體   English   中英

如何在UIView中訪問UIView

[英]How to access a UIView inside of a UIView

我是新來的iOS開發,我想知道,如果它是在所有可能訪問UIView從內UIView

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

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

任何建議將不勝感激。

如果要通過IB訪問第二個UIView:

  • 確保已在“界面生成器”中將其添加到您的根視圖
  • 使用@property (nonatomic, retain) IBOutlet UIView *myView在ViewController中創建一個插座@property (nonatomic, retain) IBOutlet UIView *myView (當然,將其合成)
  • 將視圖連接到Interface Builder中File Owner中的新創建的插座
  • 瞧! 現在應該可以使用-只需使用self.myView訪問您的視圖(如果一切正確,它將具有非nil值)

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

然后,您可以隨時根據需要設置hidden屬性的打開和關閉。

請查閱此Apple文檔 ,其中描述了如何使用Xcode 4設計用戶界面,並特別注意“直接使用源代碼進行連接”部分。

給出的答案很好,這是另一種方法:給視圖添加標簽(一個int,例如“ 1”),然后像這樣訪問它:

UIView * viewToGet = [theMainView viewWithTag:1]

您可以在IB和代碼中分配標簽。

看一下UIView文檔 您會發現有許多方法可以讓您訪問視圖的內容。 例如,有subviews屬性,該屬性提供了所有視圖子視圖的數組。 還有一個-viewWithTag:方法,該方法將返回一個指向具有指定標簽的子視圖的指針。 (您可以在Interface Builder中將視圖的標簽設置為所需的任何標簽。)

如果視圖層次結構是在.xib文件或情節提要中創建的,則訪問該層次結構的各個成員的常用方法是在控制器中創建出口(使用IBOutlet標記的屬性),然后將這些出口連接到控制器中的相應視圖。 .xib。 加載.xib時,將使用正確的視圖指針填充出口。

如果要在代碼中創建子視圖,則需要設置子UIViewframe (起點和大小)並執行[self.view addSubview:myChildView] 您可以使用屬性或ivar跟蹤此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
}

在Interface Builder中,您需要將該插座分配到Xib中的某個視圖。 通常,您可以通過選擇“所有者”來執行此操作,然后在“連接檢查器”中單擊您的屬性名稱,然后將其拖動到要分配給它的UIView中。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM