2016-04-24 64 views
1

我有一些按年份編制的體育比賽,每場比賽我都有最終結果,比賽日期和得分手。展開數據的可展開UITableView單元格

我展示這些比賽在「表視圖」,像這樣:

enter image description here

所以想什麼,我實現的是:在一個小區,當點擊,顯示比賽細節如圖所示。

我也發現了一些圖書館來實現手風琴/可擴展的風格,但沒有人做這項工作。他們只是展開細胞並展示另一個細胞。

+0

解決此問題的其他方法http://stackoverflow.com/questions/29678471/expandi ng-and-collapsing-uitableviewcells-with-datepicker/34703276#34703276 – DogCoffee

+0

非常有幫助!感謝@DogCoffee! – fabersky

+1

[iOS中的UITableView中的下拉列表]的可能重複(http://stackoverflow.com/questions/33186659/drop-down-list-in-uitableview-in-ios) – Rick

回答

4

在這種情況下,您甚至不需要使用可擴展/手風琴。這是你如何解決這個問題。讓我們說,你的細胞大小時正常爲40,並點擊尤其是當是100 heightForRowAtIndexPath可以檢查選擇了哪個小區和返回更高度

if(selectedRow == indexPath.row) { 
    return 100; 
} else { 
    return 40; 
} 

然後,你可以做的是在didSelectRowAtIndexPath方法或clickEvent方法

[self.tableView beginUpdates]; 
[[self tableView] reloadRowsAtIndexPaths:@[[NSIndexPath indexPathForItem: selectedRow inSection:0]] withRowAnimation:UITableViewRowAnimationAutomatic]; 
[self.tableView endUpdates]; 

因此,您的手機將會呈現所有內容,但基於您隱藏或顯示內容的高度。

與更新答案輸入源

ViewController.m

- (NSInteger)tableView:(UITableView *)tableView numberOfRowsInSection:(NSInteger)section { 
if(selectedIndex == indexPath.row) 
    return 100; 
else 
    return 40; 
} 

- (UITableViewCell *)tableView:(UITableView *)tableView cellForRowAtIndexPath:(NSIndexPath *)indexPath 
{ 
    customCell *cell = (UITableViewCell*)[tableView dequeueReusableCellWithIdentifier:@"Cell"]; 
    NSDictionary *matches = self.dataArray[indexPath.row]; 
    cell.matchName.text = [matches [email protected]"MatchName"]; 
    if() { 
     cell.heightConstraintSecondView.constant = 0; 
    } else { 
     cell.heightConstraintSecondView.constant = 59; 
     cell.team1.text = [matches [email protected]"Team1"]; 
     cell.team2.text = [matches [email protected]"Team2"]; 
     cell.score.text = [matches [email protected]"Score"]; 
    } 
    return cell; 
} 

- (void)tableView:(UITableView *)tableView didSelectRowAtIndexPath:(NSIndexPath *)indexPath { 
    selectedIndex = indexPath.row; 
    [self.tableView beginUpdates]; 
    [[self tableView] reloadRowsAtIndexPaths:@[indexPath] withRowAnimation:UITableViewRowAnimationAutomatic]; 
    [self.tableView endUpdates]; 
    } 
} 
+0

不錯!那麼我應該在哪裏添加匹配信息? (比如'team1 [selected_cell],team2 [selected_cell]'等等?在'beginupdates'和'endUpdates'之間? – fabersky

+0

你只需要重新加載選中的單元格並在heightforRow中改變它的高度......你是否在動態創建你的單元格?你需要用所有元素創建你的單元格,只需在取消選擇時更改其高度以顯示或隱藏匹配詳細信息 –

+0

我已將所有匹配詳細信息保存在數組中,因此基本上所有單元格都是相同的當我選擇單元格1時,它會顯示細胞的細節(匹配),當我選擇cell2時它會顯示match2細節,等等...... – fabersky