在我的项目中,有两个视图控制器 - 比方说firstViewController和secondViewController。第二个视图控制器有一个按钮,我想确保当按钮被按下时,第二个视图控制器以某种方式告诉第一个视图控制器 - “嘿,我被按下,做点什么!”,它会做一些事情,喜欢换标签。这怎么可能执行?提前致谢。一些代码:
@interface firstViewController : UIViewController
@property (weak, nonatomic) IBOutlet UILabel *textLabel;
@end
@implementation firstViewController
@synthesize textLabel;
@end
@interface secondViewController : UIViewController
-(IBAction)buttonPressed;
@end
@implementation secondViewController : UIViewController
-(IBAction)buttonPressed{
// Hey, I got pressed! Set the text on textLabel to "OK"!
}
@end
答案 0 :(得分:2)
这是一个非常简单的委托和协议机制的目标-c .. 看看这个tutorial,它会解释你是如何完成的......你也可以通过通知做到这一点,但通常不建议......(因为通知通常用于接收器未知时,例如UIDeviceBatteryLevelDidChangeNotification的情况你不确切知道哪个视图控制器想知道这个。)
答案 1 :(得分:2)
我首先考虑一下按钮的含义。它会改变模型的状态吗?
假设你的模型是一个int,按钮会增加它。视图控制器不会相互通知它们,它们只会观察模型的状态。 (带按钮的那个也可以改变状态。)
以这种方式思考,解决方案可能不是委托。这可能是通知或KVO。
答案 2 :(得分:0)
请参阅此问题的答案:Passing data between two view controllers via a protocol
但是,问问自己这里是否真的需要协议。如果它只是在这些类之间,或仅仅是访问类的数据或向类发送信息的问题,那么这就是为类创建的接口。
@interface firstViewController : UIViewController{
UILabel *textLabel; // I personally alway add IBOutlet here too, but I think that is not required.
}
@property (weak, nonatomic) IBOutlet UILabel *textLabel;
@end
在SecondViewController.m中:
#import "FirstViewController.h"
@implementation secondViewController : UIViewController
-(IBAction)buttonPressed{
// You will have to have a properly set instance variable firstViewController
[firstViewController.textLabel setText:@"OK"];
}
@end
所以你的第二个视图控制器需要知道'第一个。实现这一目标的一种方法是定义 FirstViewController * firstViewController; 作为属性,并从创建第二个视图控制器的位置设置它,并且第一个视图控制器已知。如何做到这完全取决于您的应用程序的架构。