Ios 从其他视图控制器调用按钮

Ios 从其他视图控制器调用按钮,ios,uibutton,Ios,Uibutton,当单击第一视图控制器中的按钮时,如何调用第二视图控制器中的按钮(假事件) 通过执行以下操作,我可以为同一视图控制器中的按钮伪造事件: - (IBAction)first:(id)sender { NSLog(@"this is second"); } - (IBAction)second:(id)sender { [self.first sendActionsForControlEvents:UIControlEventTouchUpInside]; // works }

当单击第一视图控制器中的按钮时,如何调用第二视图控制器中的按钮(假事件)

通过执行以下操作,我可以为同一视图控制器中的按钮伪造事件:

- (IBAction)first:(id)sender {
    NSLog(@"this is second");
}

- (IBAction)second:(id)sender {
     [self.first sendActionsForControlEvents:UIControlEventTouchUpInside];   // works
}
但如果按钮位于不同的视图控制器中,我无法伪造它:

- (IBAction)first:(id)sender {
   SecondViewController *SecondView = [[ViewController alloc] init];
   [SecondView.button sendActionsForControlEvents: UIControlEventTouchUpInside]; // doesnt work

}

假设你的第二个VC属于第一个VC,那么

a) 将类似这样的属性添加到
FirstViewController
的类扩展中,例如:

#import "SecondViewController.h"

@interface FirstViewController()
// Be aware of retain cycles.
@property (nonatomic, retain) SecondViewController *secondVC;
@end
b) 创建SecondViewController时,将其存储在我们刚刚创建的属性中:

// Change this if you're not using a Storyboard.
self.secondVC = [[UIStoryboard storyboardWithName:@"MainStoryboard"
                                           bundle:nil]
          instantiateViewControllerWithIdentifier:@"SecondViewController"];
c) 将方法添加到您的
SecondViewController

- (void)clickMyButton:(id)sender {
     [self.myButton sendActionsForControlEvents:UIControlEventTouchUpInside];
}
[self.secondVC clickMyButton:self];
d) 从您的
FirstViewController
执行此操作:

- (void)clickMyButton:(id)sender {
     [self.myButton sendActionsForControlEvents:UIControlEventTouchUpInside];
}
[self.secondVC clickMyButton:self];

如果我的第一个假设不正确,您仍然可以执行步骤A、B和D。步骤B有点变化:您必须使用在其他地方创建的现有实例设置
self.secondVC

1st view controller具有搜索栏,单击搜索栏将获得弹出框(2nd view controller)和键盘(搜索栏键盘),popover具有搜索按钮,该按钮将用于第三视图控制器(按下)。现在,单击键盘上的搜索键,第二视图搜索按钮必须调用。如果我理解正确,则当您按下键盘上的“搜索”键时,您希望执行与
搜索按钮关联的操作。对吗?如果是,您只需实现
-(void)searchBarSearchButtonClicked:(UISearchBar*)searchBar,并设置
self.searchBar.delegate=self
,使
UISearchBar
在按下搜索键时通知控制器。但搜索键属于第一视图控制器,搜索按钮属于第二视图控制器,要执行所单击的
SearchBarSearchButton
执行
[self.secondVC单击MyButton:self]
1st
控制器上,相应地设置
UISearchBar
委托,然后执行我在答案中写下的步骤。我将任务分为:1)尝试让第一个控制器知道按键的情况;2) 尝试让第一个控制器点击第二个控制器上的按钮;3) 把它们放在一起;4) 测试一切;5) 咖啡时间;