2010-10-05 135 views
0

我有一個單獨的類用於在各種視圖中顯示數據。插入/刪除行時更新表格

有一個TableView用於刪除/插入行。我有一個按鈕在Edit/Done 之間變化以允許編輯。 「流是Singleton類中的變量」

並使用editingStyleForRowAtIndexPath允許選擇哪個編輯樣式用於每一行。

- (UITableViewCellEditingStyle)tableView:(UITableView *)tableView editingStyleForRowAtIndexPath:(NSIndexPath *)indexPath{ 

     int count = [streams count]; 
     int row = indexPath.row ; 

if (row == count) 

     return UITableViewCellEditingStyleInsert; 

    else 

     return UITableViewCellEditingStyleDelete;} 

我用的cellForRowAtIndexPath爲與文本創建一個附加行「添加電話號碼」,在編輯模式下。

- (UITableViewCell *)tableView:(UITableView *)tableView cellForRowAtIndexPath:(NSIndexPath *)indexPath { 

static NSString *DeleteMeCellIdentifier = @"AudioCellIdentifier"; 

UITableViewCell *cell = [tableView dequeueReusableCellWithIdentifier: 
         DeleteMeCellIdentifier]; 
if (cell == nil) { 
    cell = [[[UITableViewCell alloc] initWithStyle:UITableViewCellStyleDefault 
            reuseIdentifier:DeleteMeCellIdentifier] autorelease]; 
} 
int x = indexPath.row; 
if (self.editing == YES) 
{ 
    if (indexPath.row == [streams count]) 

     cell.textLabel.text = @"Add Phone Number"; 

    else 
     cell.textLabel.text = [self.streams objectAtIndex:indexPath.row]; 
} 
else 
{ 
    cell.textLabel.text = [self.streams objectAtIndex:indexPath.row]; 
} 

return cell;} 

刪除行正常工作。在選擇插入一行時,另一個視圖被壓入堆棧。從這個視圖中,用戶被賦予許多文本選項來標記我們剛剛創建的新行。一旦選擇完成,以下代碼用於更新單例類。

- (void)viewWillDisappear:(BOOL)animated { 

Disc *disc = [Disc sharedDisc]; 
[disc.streams insertObject:@"0208" atIndex:0]; 
[super viewDidAppear:animated];} 

一旦該行的文本已被選中,用戶必須選擇返回按鈕才能返回到前一個TableView。這是問題出現的時間。在主TableView,而不是一個選項標記爲「添加電話號碼」 有兩個。

我知道TableView正在使用的singelton類已更新,它是不以正確方式更新的TableView。如果我然後切換編輯/完成tableView正確顯示信息。

我試圖更新ViewDidLoad & ViewWillAppear方法中的單例類,但結果相同,第一次重新加載視圖時,它不會正確顯示新行。

我想過重寫「Back」BarButton來嘗試讓TableView正確顯示。

回答

0

我不明白爲什麼重複行必須更新tableview。但是,聽起來有點像你創建兩個表,不知何故?或者甚至兩個viewcontrollers在彼此之上,但我會假設你的導航代碼設置正確(使用tabbars可能導致這與視圖控制器初始化代碼不正確)。

你一定想要任何改變ViewWillAppear中表格內容的東西。

即使在ViewDidLoad中更新(通常只在第一次出現視圖時才調用),是否會獲得重複的單元格?在導航回時執行,

如果您正在刷新表格數據,請使用ViewWillAppear中的[tableview reloadData]。

如果一切都失敗了,爲了追蹤這個bug,我建議在tableView對象上添加表達式,並觀察它改變(在調試模式下)。

+0

謝謝Henrik。無論使用ViewDidLoad還是ViewWillAppear,重複都會出現。我應該提到的是,有兩個ViewController使用。如果我編輯代碼,以便添加一行不會推新視圖,而是更新Singeton類,然後調用[tableView Reload data],它可以很好地工作。從第二個tableView更新singelton並導航回第一個tableView時出現問題。 – user244295 2010-10-05 11:25:53