我有一个名为MAGradeCell
的班级,这是一个自定义UITableViewCell
班级。在我上课之前,我从视图控制器(MAController
)内部设置了单元格,我只是configureHeaderCell
了self
(它已经解析为viewController。
既然我有UITableViewCell
的自定义类,我就不能使用self
来引用viewController。这是否意味着我应该alloc
和init
一个新的viewController?或者我是否已经执行super
之类的操作或导入viewController并获取某些接口属性或其他内容?
答案 0 :(得分:0)
试试这个,
MAGradeCell.h
中的
typedef void (^yourCallBack)(MAGradeCell *cell); //You may or may not use cell as parameter according to the need
将其创建为属性
@property (readwrite, copy) yourCallBack callBack;
MAGradeCell.m
中的
- (void)someAction {
if (self.callBack != nil) {
self.callBack(self);
}
}
单元格配置方法
MAGradeCell *cell = ....
.....
cell.callBack = ^(MAGradeCell *gradeCell) {
//Do the stuff
};
答案 1 :(得分:0)
首先,您能否澄清一下如何从UITableViewCell访问viewController?您的自定义单元格应该继承UITableViewCell可用的所有内容,但是UITableViewCell没有视图控制器作为其属性之一,因此我很难混淆您之前使用它的方式,因为您无法应用到你的子类。
如果您希望单元格从viewController中检索某些信息或通知它某些内容,或者将消息传递给它,您可以使用如下委托:
您可以在MAGradeCell.h中为单元格创建委托:
@protocol MAGradeCellDelegate <NSObject>
-(void)specialMethodWithCell:(UITableViewCell*)cell;
@end
@interface MAGradeCell:UITableViewCell
//...
@property (nonatomic, weak) id<MAGradeCellDelegate>delegate;
//...
@end
然后在您的MAGradeCel.m中执行以下操作:
if([self.delegate respondsToSelector:@selector(specialMethodWithCell:)])
{
[self.delegate specialMethodWithCell:self];
}
然后在您的视图控制器的.h文件中确保您声明您将实施此协议,并在您创建单元格时将其委托指定为自己。
在本教程中,对委托进行了描述(以及其他一些非常有用的设计模式):http://www.raywenderlich.com/46988/ios-design-patterns