如何从xib父视图获取子视图

Posted

技术标签:

【中文标题】如何从xib父视图获取子视图【英文标题】:How to get subview from xib parent View 【发布时间】:2015-02-25 00:03:46 【问题描述】:

我有一个带有单个 UIButton 的 xib 文件。所以基本上它是一个 UIView,里面有一个 UIButton。给 xib 充气后,如何获得 UIButton 的句柄?

注意:我的 ViewController 本身是使用 StoryBoard 创建的。我只需要这个额外的按钮作为我的 UITableView 的页脚。我希望按钮居中在页脚中。因此,我没有以编程方式创建按钮(我不知道如何让它居中),而是如上所述在 xib 中创建它。

【问题讨论】:

你不能只创建一个IBOutlet 来获得对UIButton 的引用吗? 【参考方案1】:

您必须创建一个MyCustomButton 类,该类将在UIView 之后继承。

然后您将按钮中的view 设为xibMyCustomButton 类型。

然后您可以在MyCustomButton 类中为该按钮创建一个IBOutlet

现在您的自定义 xib 由自定义类 MyCustomButton 描述,该类引用按钮。

详细阅读here。

【讨论】:

【参考方案2】:

这些被称为***对象,您可以使用以下代码访问它们。

NSNib *nib = [[[NSNib alloc] initWithNibNamed:@"MyView" bundle:nil] autorelease];
NSArray *topLevelObjects;
if (! [nib instantiateWithOwner:self topLevelObjects:&topLevelObjects]) // error

MyView *myView = nil;
for (id topLevelObject in topLevelObjects) 
if ([topLevelObject isKindOfClass:[MyView class]) 
    mySelectedView = topLevelObject;
    break;
    

在 if 语句中选择您想要处理的正确类,您将在“mySelectedView”中获得该对象。

【讨论】:

以上是关于如何从xib父视图获取子视图的主要内容,如果未能解决你的问题,请参考以下文章

如何在 SwiftUI 的父视图中获取子视图的变量值?

我们可以将具有自动布局的 XIB 加载为以编程方式创建的没有自动布局的视图的子视图,并使用父视图调整子视图的大小吗?

Swift - 将数据从父视图控制器传递到子视图控制器

如何获取从 nib ios 加载的自定义视图的实际大小

从 xib 获取特定的视图控制器?

iOS-获取子视图父控制器