Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/ios/107.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Ios 如何从另一个类触发UIButton?_Ios_Objective C_Uiviewcontroller_Uibutton - Fatal编程技术网

Ios 如何从另一个类触发UIButton?

Ios 如何从另一个类触发UIButton?,ios,objective-c,uiviewcontroller,uibutton,Ios,Objective C,Uiviewcontroller,Uibutton,我有两个由按钮1链接的视图控制器。viewController1包含按钮1。viewController2由按钮1触发。viewController2包含按钮2如何从button1触发button2?您可以通过编写以下代码以编程方式执行此操作: [_button sendActionsForControlEvents:UIControlEventTouchUpInside]; 但你的问题令人困惑。你说viewController2是由按钮1触发的,你为什么需要这个?你知道礼节吗?礼仪能满足你的

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

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

[_button sendActionsForControlEvents:UIControlEventTouchUpInside];
但你的问题令人困惑。你说viewController2是由按钮1触发的,你为什么需要这个?你知道礼节吗?礼仪能满足你的需要吗?请参阅。

简短回答:不要

通常,应将视图控制器视图(按钮是视图)视为专用视图。如果您想让一个视图控制器为您做些什么,您应该向该视图控制器添加一个方法来完成您想要的,然后调用它

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

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


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

从代码或故事板调用?这是什么意思,“触发器”?按钮2调用一些方法。所以你可以在任何地方调用这个方法。只要调用它,就可以编写通用代码appDelegate@matt我想让这个应用程序做的事情比这更复杂。调用这个按钮极大地简化了我的代码。