如何在两个班级之间进行交集

时间:2011-10-12 18:18:31

标签: ios class delegates uibutton

我创建了两个类。在每个班级中都有UIButton和相关事件。我们可以点击这个按钮,条件会发生变化。如果我们单击同一类中的按钮,则第二个类状态按钮应该更改。如何实现它有一个假设通过委托,但我不太明白如何。enter image description here

结果应该类似于图像,如果其中一个类按钮将其状态更改为另一个类中的1,此状态更改为零

2 个答案:

答案 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];

当我点击其他类中的一个类中的按钮时,我们调用委托方法并更改状态以进行查看。