iPhone从UITableViewCell控制器访问父类/委托

时间:2011-01-26 14:35:33

标签: iphone delegates uitableview

创建自定义UITableView单元时,我在UITableViewCell类的@interface中手动定义委托变量(每个单元必须与父类通信,因此需要连接两个类之间的连接)。然后当一个单元格附加到UITableView时,我只需设置该委托变量。

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

有更好的方法吗?

2 个答案:

答案 0 :(得分:3)

这可能没问题,但请确保您不进行保留周期。 (保留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 :(得分:1)

这就是我通常这样做的方式。只需创建单元格并设置其委托,然后再将其返回到

- (UITableViewCell *)tableView:(UITableView *)tableView cellForRowAtIndexPath:(NSIndexPath *)indexPath