如何从另一个类访问UIViewController上的IBoutlet?

时间:2013-01-14 19:58:55

标签: ios objective-c uiviewcontroller

我通过StoryBoard将UIButton放在UIVIewController上。

xxxVIewController.h中的

@interface xxxViewController : UIViewController{

IBOutlet UIButton *But;
}
@property (retain, nonatomic) IBOutlet UIButton *But;

我想从另一个类中访问“* But”来改变UIButton的setimage。

我想如果我能得到UIViewController的实例,它就解决了......

有没有人给我提示


感谢He-Was,Jasper Blues我添加了评论。

一个是xxxViewController,它不包含导航控制器。 它只包含四个按钮。

另一个是TimerClass(NSObject) 管理申请时间。

TimerClass类有计时器。 我想做的是 从TimerClass每隔几秒更改xxxViewController上的按钮颜色。

我可以轻松访问TimerClass方法。 因为xxxViewController有TimerClass实例。

但是xxxViewController是自动生成的,所以我不知道如何从TimerClass获取xxxViewController实例。

2 个答案:

答案 0 :(得分:1)

你是对的,在声明属性后,你需要一个指向xxxViewController的指针,来自将要进行更新的类。

如果它在UINavigationController中你可以从那里访问它。否则(我试图保持这个简单,以防你刚刚开始)你可以把它放在例如AppDelegate上。

答案 1 :(得分:1)

我会设置xxxVIewController作为TimerClass的代理人,当您创建TimerClass个实例时,请将代理设置为self

即:

self.timer = [[TimerClass alloc] init];
self.timer.delegate = self;  // This assumes that you have already created a declared property called delegate in your `TimerClass` class

然后,当需要更新按钮时,您应该在xxxVIewController中调用委托函数并让它更新自己的按钮:

// Or whatever method that you want called
if (self.delegate respondsToSelector(@selector(changeButtonColor)))
{
    [self.delegate changeButtonColor];
}

如果您不熟悉,请阅读协议,您将看到以更一般的方式实现此协议的好方法。