如何在从 xib 获得的视图上设置 IBAction

Posted

技术标签:

【中文标题】如何在从 xib 获得的视图上设置 IBAction【英文标题】:How to set IBAction on view obtained from xib 【发布时间】:2014-10-16 08:08:45 【问题描述】:

我有一个使用 New -> ios -> User Interface -> View 创建的 xib 文件。然后将其充气/加载到我的 UIViewController 中

UIView *myView = [[UINib nibWithNibName:@"FileName" bundle:nil] instantiateWithOwner:self options:nil].firstObject;

现在我有了视图,我需要知道用户何时点击它。我该如何设置这样的 IBAction(或任何适当的术语)?

【问题讨论】:

你没有使用 Storyboard 吗? 这只是一个视图,不是 UIViewController。这是我将在 UIViewController 中动态显示/隐藏的视图。所以不,我没有为那个视图使用故事板。但是 UIViewController 是使用故事板指定的。 如果这个问题看起来很浅,那是因为直到现在我一直只使用故事板。这是我第一次使用xib。而且我不知道如何让 IBAction 连接到 xib 中的视图。 【参考方案1】:

始终在 ViewContoller 中设置 IBAction,因此通过指定文件所有者是视图控制器来将操作绑定到 xib。您还可以通过使用 addGestureRecognizer 处理视图上的事件来动态添加视图触摸句柄。 考试: add gesture to the view

【讨论】:

我记得手势很复杂。所以这就是为什么我只想有一个 IBAction 方法。同样,这是一个 View 而不是 UIViewController。我不知道如何操作 xib 文件以指向 IBAction 可以看例子:icodeblog.com/2008/07/30/… 我按照手势链接进行操作,这很有帮助。谢谢。【参考方案2】:

XIB 中有Owner 元素。 AFAIK,只有所有者才能用于手动加载场景。

在 XIB 编辑器中,将事件链接到所有者元素。实例化XIB时,使owner参数对象提供所需的事件处理程序。

【讨论】:

所有者是指instantiateWithOwner:?还是您指的是“Interface Builder”检查器中的一个字段? 我的意思是,使用instantiateWithOwner: 方法,我们可以在加载时提供所有者对象。当然,这个所有者就是“Interface Builder”inspector Owner。

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

如何从视图控制器推送 xib

如何将 xib 的子视图显示到另一个 xib 的表格单元加载中

从 xib 加载视图控制器返回错误的帧

如何在视图控制器中为 xib 约束设置动画?

如何动态地将 xib 文件视图适合故事板视图?

如何在 xib 文件中使用子视图和超级视图之间的纵横比?