Родительский класс / делегат для доступа к iPhone из контроллера UITableViewCell - PullRequest
0 голосов
/ 26 января 2011

При создании пользовательской ячейки UITableView я вручную определяю переменную-делегат в @interface класса UITableViewCell (каждая ячейка должна взаимодействовать с родительским классом, поэтому необходимо соединение между двумя классами). Затем, когда ячейка присоединяется к UITableView, я просто устанавливаю эту переменную делегата.

@interface MyCellClass : UITableViewCell {
   MyParentController *delegat;
}
@property (nonatomic, retain) MyParentController *delegat;

Есть ли лучший способ сделать это?

Ответы [ 2 ]

3 голосов
/ 26 января 2011

Это может быть хорошо, но будьте уверены, что вы не сохраняете циклы.(A сохраняет B, B сохраняет A, ни один из них никогда не освобождается)

Если вы просто используете только функциональность MyParentController, тогда хорошей идеей будет создать протокол и установить делегат в качестве объекта.который принимает (реализует) этот @protocol. Это не обязательно, но это хорошая практика и лучший дизайн таким образом.

Вы можете создать свой протокол как:

//MyProtocol.h
@protocol MyProtocol <NSObject>

@required
- (void) requiredMethod:(NSString *)param;
@optional
- (void) optionalMethod:(NSString *)param;
@end

И сделать свой класс:

#import "MyProtocol.h"

@interface MyCellClass : UITableViewCell {
   id<MyProtocol> delegate;
}
@property (nonatomic, assign) id<MyProtocol> delegate; //see I changed it to assign?

Кроме того, если у вас есть делегаты, вы должны избегать их сохранения, иначе у вас будут циклы сохранения, а значит, утечки памяти.

1 голос
/ 26 января 2011

Так я обычно делаю.Просто создайте ячейку и установите ее делегат перед возвратом в

- (UITableViewCell *)tableView:(UITableView *)tableView cellForRowAtIndexPath:(NSIndexPath *)indexPath
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...