如何从另一个类触发UIButton?

时间:2014-12-30 03:37:44

标签: ios objective-c uiviewcontroller uibutton

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

2 个答案:

答案 0 :(得分:1)

您可以通过以下方式以编程方式执行此操作:

[_button sendActionsForControlEvents:UIControlEventTouchUpInside];

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

答案 1 :(得分:0)

简答:不要。

通常,您应将视图控制器视图(和按钮视图)视为私有视图。如果您想让视图控制器为您做一些事情,您应该向该视图控制器添加一个方法来执行您想要的操作,然后调用它。

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

在这种情况下,它可以像在.h文件中放置按钮的IBAction,然后调用操作一样简单。唯一的问题是,如果IBAction方法需要sender参数指向按钮。您可以传递nil的发件人并编写您的操作方法来处理nil发件人。

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