Как сделать пересечение между двумя классами - PullRequest
0 голосов
/ 12 октября 2011

Я создал два класса.В каждом классе есть UIButton и соответствующее событие.Мы можем нажать на эту кнопку, и условие изменится.Если мы нажмем на кнопку в том же классе, и кнопка статуса второго класса должна измениться.Как реализовать это, есть предположение сделать это через делегата, но я не совсем понимаю, как. enter image description here

В результате должно получиться что-то вроде изображения, если одна из кнопок классов меняет свой статуспо состоянию на 1 в другом классе это состояние изменилось на ноль

Ответы [ 2 ]

1 голос
/ 19 октября 2011

Если я правильно понимаю ваш вопрос, вы бы объявили делегата в каждом классе, скажем, в классе A:

@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];
    ...
}

Конечно, вам нужно больше иваров для обработки статуса.

Надеюсь, это поможет.

0 голосов
/ 02 ноября 2011

Я решил эту проблему следующим образом.

Я создаю протокол 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];

Когда я нажимаю на кнопку в одном классе в другом классе, мы вызываем метод делегата и меняем состояние для просмотра.

...