如何从另一个类触发 UIButton?

Posted

技术标签:

【中文标题】如何从另一个类触发 UIButton?【英文标题】:How to trigger UIButton from another class? 【发布时间】:2014-12-30 03:37:44 【问题描述】:

我有两个由 button1 链接的视图控制器。 viewController1 包含 button1。 viewController2 由 button1 触发。 viewController2 包含 button2。 如何从 button1 触发 button2?

【问题讨论】:

从代码或情节提要中调用? “触发器”是什么意思?按钮 2 调用一些方法。因此,您可以从任何地方调用该方法。就叫吧。 在appDelegate中编写常用代码 @matt 我想让应用程序做的事情比这更复杂。调用按钮极大地简化了我的代码。 【参考方案1】:

您可以通过编写以下代码以编程方式完成:

[_button sendActionsForControlEvents:UIControlEventTouchUpInside];

但你的问题令人困惑。你说viewController2是由button1触发的,为什么需要这个?你知道协议吗?协议可以满足您的需求吗?请参阅Apples Document。

【讨论】:

【参考方案2】:

简短回答:不要。

一般来说,您应该将视图控制器视图(而按钮是视图)视为私有的。如果你想让一个视图控制器为你做一些事情,你应该给那个视图控制器添加一个方法来做你想做的事情,然后调用它。

乱用视图控制器的视图层次结构违反了封装原则,这是一个重要的 OOD(面向对象设计)概念。除了其他不好的事情外,它还会使您的程序变得脆弱,因为如果您将来决定更改 viewController1 的 UI 并四处移动按钮,您可以轻松地破坏视图控制器 2。

在这种情况下,只需将按钮的 IBAction 放在 .h 文件中,然后调用该操作即可。唯一的问题是 IBAction 方法是否需要 sender 参数指向按钮。你也许可以传入一个 nil 的发送者并编写你的操作方法来处理一个 nil 发送者。

另一种选择是将实际执行按钮工作的代码提取到单独的方法中,并让按钮的 IBAction 代码调用该方法,并让您的其他视图控制器也调用它。这也使您的意图更清晰,并使您的代码更具自我记录性。六个月后(或 6 年后!)您可能不记得外部视图控制器调用 viewController1 的 IBAction 方法之一,并且可能不会想到它。但是,公共的非 IBAction 方法是对象“合同”的一部分,您应该期望外部对象调用它。

【讨论】:

以上是关于如何从另一个类触发 UIButton?的主要内容,如果未能解决你的问题,请参考以下文章

从另一个类修改 UIButton 的 alpha 属性

如何更改 UIButton 标题?

使用 UIButton 进行触摸检测

Swift:从另一个类调用 UIButton press

UIButton 从 Core Data 增加一个数组,从另一个类完成

用户单击时如何禁用 UIButton 的突出显示