2011-06-12 70 views
0

我有一個TTTableViewController,它遵循TTTableViewController - > TTDataSource - > TTModel模式。我有TTTableMoreButton,當用戶點擊它時,我的列表繼續加載更多的項目。Three20 TTTableViewController自動加載

如何更改此TTTableMoreButton的行爲?當用戶到達列表的末尾時,我希望它表現得像點擊一樣。在Facebook應用程序中,有這樣的實現。我希望我能說出我想要的。

+0

我就已經找到並實施解決方案,如果有人想我可以分享它。 – 2011-06-12 02:01:47

回答

3

Here是怎麼做到的。

完全披露:這是我的代碼博客。

+0

感謝您的回答。我也添加了我自己的實現。它的工作完美,但如果有錯誤(例如關於表演),請讓我知道。 – 2011-06-12 10:12:18

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]; 
    } 
} 
+0

祝賀你解決問題,但我覺得加載更多單元的邏輯不應該包含在單元本身中,而應該包含在控制器/數據源層中。它更接近MVC – coneybeare 2011-06-12 17:29:39

+0

剛剛使用了你的代碼的一個微妙的變種,謝謝:),順便說一下,'AutoMoreTableItem'並不是真的需要,因爲我猜你沒有其他的'TTTableMoreButton',我也更喜歡'willMoveToSuperview'來調用'負載:更多:'。同樣,你的'setObject'覆蓋與'super'完全相同:它是無用的,更糟的是,通過調用'[super setObject:object]'已經完成了一些事情。 – 2011-07-19 16:52:17

相關問題