自定义 UIView 子类添加 nib 子视图
Posted
技术标签:
【中文标题】自定义 UIView 子类添加 nib 子视图【英文标题】:Custom UIView subclass add nib subview 【发布时间】:2014-06-04 13:39:27 【问题描述】:我有一个自定义的UIView
子类,我们称它为CustomViewA
,我使用initWithFrame:
对其进行初始化,并以编程方式添加一些UIView(如UILabel 等)。现在需要将另一个视图添加到CustomViewA
,所以我创建了一个nib
,我在其中布置了一些GUI元素(一个是UISegmentedControl
)
现在我遇到了一些关于如何正确将此笔尖作为子视图添加到CustomViewA
的问题。我需要为笔尖创建 .h/.m 文件吗?我希望 CustomViewA 在分段控件更改值时接收操作。
【问题讨论】:
【参考方案1】:[[NSBundle mainBundle] loadNibNamed:@"MyNibName" owner:self options:nil];
[self.view addSubview:self.nibView];
在 nib 中,确保将文件所有者的类设置为要添加到的视图控制器。
您也可以像往常一样从笔尖添加属性和IBActions
。
【讨论】:
我没有将笔尖添加到视图控制器。我将它添加到另一个 UIView (CustomViewA
)。但也许这并不重要?还有你在哪里设置 self.nibView ?
如果你将它添加到另一个 UIView,让 CustomViewA 的视图控制器将笔尖添加到 CustomViewA
另外,我从笔尖中的插座获得了 self.nibView
有没有办法避免使用另一个超级视图?在引用view
时只使用nibView
吗?【参考方案2】:
我需要为笔尖创建 .h/.m 文件吗?
不,你不需要。
分段控件改变值时如何接收动作?
您可以在您的xib中为分段控件设置一个标签号,它应该在您的xib中视图的所有子视图中是唯一的。
您可以通过代码获得分段控件。 UISegmentedControl *segmentedControl = (UISegmentedControl *)[view viewWithTag:1024];
,拿到分段控件后,就可以用代码[segmentedControl addTarget:self action:@selector(action:) forControlEvents:UIControlEventValueChanged];
添加动作了
编辑:如何获取xib的根视图?
使用下面的代码:
UIView *rootView = [[[NSBundle mainBundle] loadNibNamed:@"YourXibName" owner:nil options:nil] firstObject];
【讨论】:
我不能通过界面构建器添加一个动作并在我的CustomViewA
中定义一个(IBAction)吗?我尝试将其连接到分段控件,但是当我点击分段控件时没有任何反应?
@PeterWarbo 你是如何加载 xib 的?你在加载时设置了xib的所有者吗?如果通过 IB 添加操作并在 CustomViewA 中定义 (IBAction),则应使用 UIView *rootView = [[[NSBundle mainBundle] loadNibNamed:@"YourXibName" owner:self options:nil] firstObject];
加载 xib。
是的,我按照您的描述加载了它...视图在屏幕上正确显示,但是当我点击分段控件时没有任何反应。在界面生成器中,它说它已连接到 UIControlEventValueChanged 以执行我的操作...
@PeterWarbo 您是否将文件所有者的类别设置为CustomViewA
?
是的...我该如何调试这个?【参考方案3】:
我终于弄清楚发生了什么。我添加到CustomViewA
的笔尖被添加到CustomViewA
s 框架之外。所以很明显,当子视图在父视图的框架之外时,它不会拦截触摸。
【讨论】:
以上是关于自定义 UIView 子类添加 nib 子视图的主要内容,如果未能解决你的问题,请参考以下文章