2013-12-09 96 views
0

我在我的應用程序中有一個表格視圖,它有6行,播放器1到播放器6。用戶輸入玩家名稱,可以通過滑動並點擊「刪除」來刪除行。當行的文本字段中有文本時,我遇到了問題。例如,我用'一'到'三'填寫前三行的文本字段。如果你刪除了第三行,表示'三',它將刪除該行,但文本字段中的文本'三'將進入播放器四下面的行。解決這個問題的最好方法是什麼?當從UITableView刪除行時刪除UITextField內容

- (UITableViewCell *)tableView:(UITableView *)tableView cellForRowAtIndexPath:(NSIndexPath *)indexPath 
{ 
    static NSString *CellIdentifier = @"playerCell"; 
    playerCell *cell = [tableView 
          dequeueReusableCellWithIdentifier:CellIdentifier 
          forIndexPath:indexPath]; 

    cell.playerLabel.text = [[_playerNames objectAtIndex:indexPath.row]objectForKey:@"title"]; 
    NSString *test = [NSString stringWithFormat:@"%@", cell.playerNameBox.text]; 
    cell.playerNameBox.tag = indexPath.row; 

    NSString *key = [NSString stringWithFormat:@"%ld", (long)indexPath.row]; 
    [[NSUserDefaults standardUserDefaults] 
    setObject:test forKey:key]; 

    return cell; 
} 

刪除行:

- (void)tableView:(UITableView *)tableView commitEditingStyle:(UITableViewCellEditingStyle)editingStyle forRowAtIndexPath:(NSIndexPath *)indexPath 
{ 
    if (editingStyle == UITableViewCellEditingStyleDelete) 
    { 
     [_playerNames removeObjectAtIndex:indexPath.row]; 
     [Table reloadData]; 

    } 
} 

在節中的行數= 6

- (NSInteger)tableView:(UITableView *)tableView numberOfRowsInSection:(NSInteger)section 
{ 
    // Return the number of rows in the section. 
    return _playerNames.count; 
} 
+0

假設你有一個自定義類的單元格,在'prepareForReuse'方法中,將文本字段設置爲'nil'。 – bobnoble

+0

這樣做會刪除每個文本字段中的文本。有沒有辦法刪除該行文本字段中的文本? –

回答

1

在你的 「cellForRowAtIndexPath」 的方法,你沒有正確地檢查爲無物的情況下。

相反的:

cell.playerLabel.text = [[_playerNames objectAtIndex:indexPath.row]objectForKey:@"title"]; 

務必:

NSString *title = [[_playerNames objectAtInex:indexPath.row] objectForKey:@"title]; 
cell.playerLabel.text = (title ? title : @""); // set the label to either title or the empty string 

我懷疑發生的事情是,你沒有正確重裝後或再使用重置文本標籤。

但無論如何,不​​是重新加載數據,爲什麼不能重新加載,並且刪除了標記爲刪除的行。

即:

- (void)tableView:(UITableView *)tableView commitEditingStyle:(UITableViewCellEditingStyle)editingStyle forRowAtIndexPath:(NSIndexPath *)indexPath 
{ 
    if (editingStyle == UITableViewCellEditingStyleDelete) 
    { 
     [_playerNames removeObjectAtIndex:indexPath.row]; 
     [tableView deleteRowsAtIndexPaths: [NSArray arrayWithObject: indexPath] withRowAnimation: UITableViewRowAnimationLeft]; 
    } 
} 

另一個FYI:

我注意到你有:

[Table reloadData]; 
在你的代碼

。 Objective-C的最佳實踐是而不是用大寫字母命名實例變量。它應該是更具描述性的,比如「itemTable」。

+0

工作。我以前從未使用表格視圖,所以我仍然在學習他們的工作方式。在重命名我的實例變量的過程中。 –