繁体   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