来自自定义UITableViewCell类的引用视图控制器

时间:2014-03-24 08:42:50

标签: ios objective-c uitableview uiviewcontroller

我有一个名为MAGradeCell的班级,这是一个自定义UITableViewCell班级。在我上课之前,我从视图控制器(MAController)内部设置了单元格,我只是configureHeaderCellself(它已经解析为viewController。

既然我有UITableViewCell的自定义类,我就不能使用self来引用viewController。这是否意味着我应该allocinit一个新的viewController?或者我是否已经执行super之类的操作或导入viewController并获取某些接口属性或其他内容?

2 个答案:

答案 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

相关问题