我打算创建两个UIViewController。基本上,两个视图控制器之一中有一些按钮。当我按下其中一个按钮时,我想在另一个视图控制器中触发一些动作。有没有办法让它成为可能?
答案 0 :(得分:0)
有三种可能的方法可以做到这一点,
使用NSNotificationCenter
,使用Delegates
,最后一个使用Blocks
,第一个选项很容易学习。
希望这有帮助
答案 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];
}
这是委托模式。