在一个视图控制器中创建UIButton的IBAction,并影响另一个视图控制器中的操作

时间:2015-05-20 15:03:40

标签: ios objective-c uiviewcontroller uibutton ibaction

我打算创建两个UIViewController。基本上,两个视图控制器之一中有一些按钮。当我按下其中一个按钮时,我想在另一个视图控制器中触发一些动作。有没有办法让它成为可能?

2 个答案:

答案 0 :(得分:0)

有三种可能的方法可以做到这一点,

使用NSNotificationCenter,使用Delegates,最后一个使用Blocks,第一个选项很容易学习。

  1. 将观察者添加到FirstViewController
  2. 在SecondViewController中发布通知(当用户单击按钮时)
  3. 参考this link

    希望这有帮助

答案 1 :(得分:0)

是的,您可以使用委托。

例如,您可能拥有此ViewControllers。

//FirstViewController.h

@protocol ProtocolName <NSObject>

  - (void)doSomething;

@end

@interface FirstViewController

 @property (nonatomic, strong) id<ProtocolName> delegate;

 @property (weak, nonatomic) IBOutlet UIButton *button;

 - (IBAction)action:(id)sender;

@end

这里我们需要一个协议,该协议定义了在实现该协议的任何Object中实现的一个或多个方法。而且我们还需要一个委托,即实现此协议的对象(在本例中称为“ProtocolName”,但您可以根据需要对其进行命名)。

然后是第二个ViewController

//SecondViewController.h
#import "FirstViewController.h" //Need this to reference protocol

@interface SecondViewController <ProtocolName>

@end

我们说SecondViewController将实现ProtocolName协议,因此在他的.m文件中我们需要这样做。

//SecondViewController.m

- (void)doSomething{
  //Do something
}

这就是魔术。

假设当您点击FirstViewController中的按钮时,它会触发SecondViewController中的doSomething方法。所以,你需要做这样的事情。

//FirstViewController.m

//...
SecondViewController secondVC = [[SecondViewController alloc] init];
this.delegate = secondVC; //DON'T FORGET THIS
//...

- (IBAction)action:(id)sender{ 
 [this.delegate doSomething];
}

这是委托模式。