修改视图控制器的属性形成另一个视图控制器

时间:2012-03-17 15:44:09

标签: objective-c ios

在我的项目中,有两个视图控制器 - 比方说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

3 个答案:

答案 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; 作为属性,并从创建第二个视图控制器的位置设置它,并且第一个视图控制器已知。如何做到这完全取决于您的应用程序的架构。