2015-10-11 55 views
1

所以我有一個UITableView,我想在點擊按鈕時更新一個區段。現在,本節中的行數將使用不同的數組填充。我根據字典中的索引選擇要返回哪一個。像這樣:iOS UITableView在同一節中使用不同數組的區段中的行數

- (NSInteger)tableView:(UITableView *)tableView numberOfRowsInSection:(NSInteger)section { 
// Return the number of rows in the section. 
switch (section) { 
    case 0: 
     return 1; 

    case 1: { 
     NSMutableArray *array = [self.dict objectForKey:[NSNumber numberWithInteger:self.index]]; 
     return [array count] + 1; 
    } 
    default: 
     break; 
} 
return 1; 
} 

因此,第1節的行取決於不同的數組。所以現在在我的表格視圖中,我有一個按鈕在第1部分插入另一行,我也更新了相應的數組。現在,當我點擊另一個更新本節以顯示self.dict數據結構中不同數組值的按鈕時,我收到一個錯誤: '無效的更新:第1節中的行數無效。更新(3)之後的現有部分必須等於更新前(4)的該部分中包含的行數,加上或減去從該部分插入或刪除的行數(插入0,刪除0)以及加上或減去移入或移出該部分的行數(移入0,移出0)。因此,例如,如果在我的第一個數組中有3個單元格,然後用戶再添加一個以至於有4個單元格,那麼如果用戶單擊了應該更新部分1的按鈕以顯示第二個數組(其中有3個單元格),上面的錯誤被拋出。我認爲這是因爲數據源發生了變化,行數減少了,沒有明確刪除單元格。我該如何解決這個問題?

有更多的代碼更新時間:

// Insert here when the very last cell of section 1 is selected 
- (void)tableView:(UITableView *)tableView didSelectRowAtIndexPath:(NSIndexPath *)indexPath 
{ 
    NSMutableArray *array = [self.dict objectForKey:[NSNumber numberWithInteger:self.index]]; 
    if (indexPath.section == 1 && indexPath.row == [array count]) { 
     [array addObject:[NSNumber numberWithInt:8]]; 
     [self.tableView insertRowsAtIndexPaths:[NSArray arrayWithObject:[NSIndexPath indexPathForRow:[array count]-1 inSection:1]] withRowAnimation:UITableViewRowAnimationFade]; 
    } 
} 


// Code for reloading the table view 

- (IBAction)next:(id)sender { 
    self.index++; 
    [self.tableView reloadSections:[NSIndexSet indexSetWithIndex:0] withRowAnimation:UITableViewRowAnimationFade]; 
    [self.tableView reloadSections:[NSIndexSet indexSetWithIndex:1] withRowAnimation:UITableViewRowAnimationFade]; 
} 

}

+0

你能顯示代碼,你添加一個小區在哪裏更新第1部分以顯示第二個數組? – anhtu

回答

1

而不是重新加載部分,你應該嘗試reloadData

- (IBAction)next:(id)sender { 
    self.index++; 
    [self.tableView reloadData] 
} 
+0

我發誓,我做了這件事,但沒有奏效,但現在看起來像是這樣。感謝您的幫助哈哈。 – user3129120

相關問題