确定UITableView是否以编程方式具有静态单元格或动态原型?

时间:2013-11-21 20:05:53

标签: ios objective-c uitableview uistoryboard

我正在编写一个抽象的UITableViewController类,我想在viewDidLoad中写一些内容,如

if (self.tableView.contentType == UITableViewContentTypeStaticCells) {
    // Do something when table view has static cells
} else {
    // Do something when table view has dynamic prototypes
}

但显然UITableView上没有contentType。有没有办法以编程方式确定tableView的故事板内容是静态的还是动态的?

3 个答案:

答案 0 :(得分:1)

只是为了好奇:[tableViewController valueForKey: @"staticDataSource"]会让你到那里,其中tableViewController是一个UITableViewController。

但是(!)这可能无法通过AppStore,并且可能会在没有警告的情况下中断,因为它不是已发布的API。

更新:似乎检查是否检查,如果

self == self.tableView.dataSource

虽然self是一个UITableViewController,它也会为你提供重新请求的结果。

答案 1 :(得分:0)

没有建立区分两者的方法,但如果你对你想要实现的目标更具体,我们或许可以建议其他方法来实现你的目标。

答案 2 :(得分:0)

我的解决方案假定抽象的UITableViewController类必须公开BOOL属性

@property (assign, nonatomic) BOOL staticCells;

此属性由具体类增值,数据源方法实现检查属性的存在条件,如下例所示:

- (UITableViewCell*) tableView:(UITableView *)tableView cellForRowAtIndexPath:(NSIndexPath *)indexPath
{
    if (!self.staticCells) {
        ...
    }
    else{
        UITableViewCell* cell = [super tableView:tableView cellForRowAtIndexPath:indexPath];
        [cell layoutIfNeeded];
        return cell;
    }
}

我想你正在寻找一个系统框架属性(或委托方法)来检查静态行为,但这个解决方案可能对某人有用