2011-06-12 3 views
0

나는 TTTableViewController -> TTDataSource -> TTModel 패턴을 따르는 TTTableViewController를 가지고있다. TTTableMoreButton을 사용하고 사용자가 클릭 할 때 더 많은 항목을로드하도록 내 목록이 계속됩니다.Three20 TTTableViewController로드가 더 자동적으로

어떻게이 TTTableMoreButton의 동작을 변경할 수 있습니까? 사용자가 목록의 끝에 왔을 때 나는 그것이 마치 클릭 한 것처럼 행동하기를 원합니다. Facebook 앱에는 이와 같은 구현이 있습니다. 내가 원하는 것을 말할 수 있기를 바랍니다.

+0

난 그냥 발견하고 솔루션을 구현 사람이 원한다면 나는 그것을 공유 할 수 있습니다했습니다. –

답변

3

Here하는 방법입니다.

전체 공개 : 내 코드 블로그입니다.

+0

답변 해 주셔서 감사합니다. 나는 또한 내 자신의 구현을 추가했습니다. 완벽하게 작동하지만 실수 (예 : 실적)가있는 경우 알려 주시기 바랍니다. –

1

나는 coneybeare의 대답 바로 전에 나는 내 자신의 접근법을 발견했다. 나는 단순히 TTTableMoreButton과 TTTableMoreButtonCell 클래스를 하위 클래스로 분류하고 "- (void) layoutSubviews"메서드에서 "Load More"버튼이 나타나는지 감지하고 아직 수행하지 않은 경우 더 많은 데이터를로드하기 시작해야합니다.

어떤 접근법 (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

자신을 해결하는 것에 축하하지만, 더 많은 셀을로드하는 논리가 셀 자체 내에 포함되어서는 안되지만 컨트롤러/data_source 레이어에 포함되어야한다고 생각합니다. 그것은 MVC에 가까움 – coneybeare

+0

그냥 코드의 미묘한 변종을 사용했습니다. 감사합니다. :) btw,'AutoMoreTableItem'은'TTTableMoreButton'을 사용하지 않았기 때문에 필요하지 않습니다.'willMoveToSuperview'는' load : more :'. 또한'setObject' 오버라이드는'super'와 똑같은 일을합니다 : 쓸데없고 더 나쁜 것은'[super setObject : object]'를 호출하여 이미 한 일을합니다. –