передача параметров между двумя кончиками: предложение? - PullRequest
0 голосов
/ 19 мая 2011

В моем главном перо (nib1) у меня есть кнопка, которая активирует другой перо (nib2), используя фрагмент кода ниже.

В настоящее время я передаю значения в nib2 и получаю их из nib2 путем создания методов класса в nib1. Но одна из моих целей этого проекта упражнений заключается в том, что мне нужно спроектировать nib2 таким образом, чтобы я мог повторно использовать nib2 в другом более позднем проекте. Это означает, что nib2 не должен ничего знать о классе nib1. Так что, когда я снова использую nib2 позднее, мне не нужно изменять его код (для вызова методов класса nib1.)

Я думал о создании методов класса в классе nib2. Но тогда как я смогу вызвать метод до того, как nib2 станет активным?

Правильно ли подходит мой подход? какие-либо комментарии?

NSWindowController *iQWController = [[NSWindowController alloc] initWithWindowNibName:@"iQueryWindow"];
[iQWController showWindow:sender];

1 Ответ

1 голос
/ 19 мая 2011

В этом примере я предполагаю, что у вас есть определения классов nib1.h / nib1.m / nib1.xib & nib2.h / nib2.m / nib2.xib

Вы должны создать свойства в nib2 для полученияданные в nib 2.

Чтобы получить данные из nib 2 обратно в nib 1, вы должны определить протокол делегата, сделать так, чтобы nib 1 реализовал его, и установить его как делегат nib 2.

nib2.h будет выглядеть примерно так:

@protocol Nib2Delegate;

@interface Nib2 : UIViewController {
    id <Nib2Delegate> delegate;
}

@property (nonatomic, assign) id <Nib2Delegate> delegate;

@end

@protocol Nib2Delegate 

- (void)myMethod;

@end

в Nib1.h у вас будет:

#import "Nib2.h"

@interface Nib1 : UITableViewController <Nib1Delegate> {

}

- (void)myMethod;

@end

в Nib1.m

Nib2 *nib2 = [[Nib2 alloc] initWithNibName:@"Nib2" bundle:nil];
nib2.delegate = self;

Тогда вы реализуете myMethodв Nib1.m.Если вы хотите позвонить в Nib2.m, это будет выглядеть как

[delegate myMethod];
...