我创建了两个类。在每个班级中都有UIButton和相关事件。我们可以点击这个按钮,条件会发生变化。如果我们单击同一类中的按钮,则第二个类状态按钮应该更改。如何实现它有一个假设通过委托,但我不太明白如何。
结果应该类似于图像,如果其中一个类按钮将其状态更改为另一个类中的1,此状态更改为零
答案 0 :(得分:1)
如果我理解你的问题,你会在每个班级中宣布一个代表,比如在classA:
@class ClassB;
interface classA: UIbutton {
ClassB* delegate;
...
}
@property (nonatomic, assign) ClassB* delegate;
- (void) notifystatuschange:(int) status;
@class子句是为了避免在接口文件中导入ClassB.h。您确实在实现文件中导入ClassB.h. 您使用assign声明属性而不保留,因为您只想保留指向委托的指针,因此您不会分配或取消分配它。 您需要一种方法来接收状态更改通知。
一旦你在classA按钮的回调中得到了这个,你就可以在委托上调用notify方法:
-(void) classAcallbak:(ClassA*) sender {
[sender.delegate notifystatuschange:1];
...
}
当然,您需要更多的ivars来处理状态。
希望这有帮助。
答案 1 :(得分:0)
我解决了这个问题如下。
我创建了一个Objective-C协议,其中包含一个必需的方法
@protocol MyProtocolForState <NSObject>
- (void)changeStateButton;
接下来我创建了A类 - 这个类包含将与另一个类(B类)配对的按钮
#import "MyProtocolForState.h"
@interface A : UIViewController <MyProtocolForState>{
id<MyProtocolForState.h> delegate;
}
@property (nonatomic, assign)id<MyProtocolForState.h> delegate;
- (IBAction)touchButton:(id)sender;
在实施文件中,我添加了委托方法和反应方法
- (IBAction)touchButton:(id)sender {
[self.view setBackgroundColor:[UIColor redColor]];
[delegate changeMethod];
}
- (void)changeMethod{
[self.view setBackgroundColor:[UIColor whiteColor]];
}
接下来我创建了B类 - 这个类包含将与另一个类(A类)
配对的按钮#import "MyProtocolForState.h"
@interface B : UIViewController <MyProtocolForState>{
id<MyProtocolForState.h> delegate;
}
@property (nonatomic, assign)id<MyProtocolForState.h> delegate;
- (IBAction)touchButton:(id)sender;
在实施文件中,我添加了委托方法和反应方法
- (IBAction)touchButton:(id)sender {
[self.view setBackgroundColor:[UIColor redColor]];
[delegate changeMethod];
}
- (void)changeMethod{
[self.view setBackgroundColor:[UIColor whiteColor]];
}
接下来,我创建实例类A和类B并绑定它们
A * a = [[A alloc] init];
[a.view setFrame:CGRectMake(50, 50, 100, 100)];
B * b = [[B alloc] init];
[b.view setFrame:CGRectMake(200, 50, 100, 100)];
a.delegate = b;
b.delegate = a;
[self.window addSubview:a.view];
[self.window addSubview:b.view];
当我点击其他类中的一个类中的按钮时,我们调用委托方法并更改状态以进行查看。