Three20 TTTableViewController加载更自动

时间:2011-06-12 00:58:26

标签: ios three20

我有一个跟随TTTableViewController的TTTableViewController - > TTDataSource - > TTModel模式。我有TTTableMoreButton,当用户点击它时,我的列表会继续加载更多项目。

如何更改此TTTableMoreButton的行为?当用户到达列表的末尾时,我希望它的行为就像单击它一样。在Facebook应用程序中,有一个这样的实现。我希望我能说出我想要的东西。

2 个答案:

答案 0 :(得分:3)

Here是如何做到的。

完全披露:这是我的代码博客。

答案 1 :(得分:1)

这里我有自己的方法,我在coneybeare的回答之前就已经找到了。我简单地将TTTableMoreButton和TTTableMoreButtonCell类子类化,并在“ - (void)layoutSubviews”方法中,我检测到“加载更多”按钮正在出现,如果它还没有这样做,它应该开始加载更多数据。

我不确定哪种方法(coneybeaare或我的)是最好的,我期待着有关它的评论。

AutoMoreTableItem.h

@interface AutoMoreTableItem : TTTableMoreButton {

}

@end

AutoMoreTableItem.m

#import "AutoMoreTableItem.h"

@implementation AutoMoreTableItem

@end

AutoMoreTableItemCell.h

@interface AutoMoreTableItemCell : TTTableMoreButtonCell {

}

@end

AutoMoreTableItemCell.m

#import "AutoMoreTableItemCell.h"
#import "AutoMoreTableItem.h"


@implementation AutoMoreTableItemCell
- (void)setObject:(id)object {
    if (_item != object) {
        [super setObject:object];

        AutoMoreTableItem* item = object;
        self.animating = item.isLoading;

        self.textLabel.textColor = TTSTYLEVAR(moreLinkTextColor);
        self.selectionStyle = TTSTYLEVAR(tableSelectionStyle);
        self.accessoryType = UITableViewCellAccessoryNone;
    }
}


- (void)layoutSubviews {
    [super layoutSubviews];

    AutoMoreTableItem* moreLink = self.object;
    if(moreLink.isLoading ==YES) {
        return;
    }

    if (moreLink.model) {
        moreLink.isLoading = YES;
        self.animating = YES;
        [moreLink.model load:TTURLRequestCachePolicyDefault more:YES];

    }

}

@end

当然,在数据源实现中:

- (Class)tableView:(UITableView*)tableView cellClassForObject:(id) object {   

    if([object isKindOfClass:[AutoMoreTableItem class]]){
        return [AutoMoreTableItemCell class];  
    }  else {  
        return [super tableView:tableView cellClassForObject:object];  
    }  
}