2016-04-11 25 views
0

我有用於添加配方指令(步驟)的TableView。第一個單元格給出,用戶可以根據需要添加更多單元格。 用戶可以刪除他們不需要的單元格。Swift 2.1 - 刪除單元格後在TableViewCell中清除文本字段

每個單元格(行)都配置有指令文本內容的UITextfield和用於標記指令順序的UILabel。

其中一種可能的用例可能是該用戶在單元格中鍵入了一些文本,並決定將其刪除以重新開始。當用戶按添加步驟按鈕時,用戶將看到一個新的單元格,但前面的文本已填充。 爲了防止出現這種情況,我有cell.stepTextField.text = "",以便用戶可以獲得具有明確文本字段的單元格。

這是一種有效的工作,但是當我玩很多可能的互動時,我會得到有趣的結果,如附加的截圖。在該示例屏幕截圖中,即使我沒有刪除該單元格,我仍然在第一個單元格中丟失了指令。

如何確保用戶每次都會得到一個乾淨的文本字段,而不會丟失其他單元格的文本?

我也試過cell.stepTextField.removeFromSuperview()也,但這將完全刪除一個單元格的文本字段,這不是我想要的。

請注意,我在刪除函數中沒有對DataSource進行任何更新,因爲我只能獲得保存函數中tableview的所有文本字段的值。

func tableView(tableView: UITableView, commitEditingStyle editingStyle: UITableViewCellEditingStyle, forRowAtIndexPath indexPath: NSIndexPath) { 

    if tableView == stepTableView { 

     if editingStyle == .Delete { 
      // Delete the row from the data source 
      if stepOrder.count > 1 { 

       let cell = self.stepTableView.cellForRowAtIndexPath(indexPath) as! StepCell? 
       cell!.stepTextField.text = "" 
       stepTableView.deleteRowsAtIndexPaths([indexPath], withRowAnimation: .Fade) 
      } 

     } else if editingStyle == .Insert { 
      // Create a new instance of the appropriate class, insert it into the array, and add a new row to the table view 
     } 

    } 

} 

(更新) 的cellForRowAtIndexPath

func tableView(tableView: UITableView, cellForRowAtIndexPath indexPath: NSIndexPath) -> UITableViewCell { 

    if tableView == self.stepTableView { 
     let aCell = tableView.dequeueReusableCellWithIdentifier("StepCell", forIndexPath: indexPath) as! StepCell 
     stepTextField = aCell.getTextField() 
     aCell.configureStepOrder(stepOrder[indexPath.row]) 
     aCell.stepTextField.delegate = self 
     cell = aCell 
    } 

} 

enter image description here

+0

將標記添加到cellforRowAtIndex方法中的textfield中,然後您可以在刪除單元格的同時清除特定的textfiled文本值 – swiftBoy

+0

您可以共享cellForRowAtIndexPath方法的代碼嗎? –

+0

@SeongLee你會得到奇怪的結果,因爲你正在重複使用單元格,並且不保存用戶所做的更改... –

回答

1

創建一個數組來存儲用戶... 所做的所有更改,其中指數將你的手機號碼

var textFieldArray = [String]() 

現在當上添加步用戶點擊追加一個空字符串中textFieldArray

而在的cellForRowAtIndexPath添加此

cell.stepTextField.text = textFieldArray[indexPath.row] 
cell.stepTextField.tag = indexPath.row 

現在,當用戶刪除單元從textFieldArray刪除該元素並重新加載的tableView

textFieldArray.removeAtIndex(indexPath.row) 
tableView.reload() 
+0

我已經嘗試將更改存儲在數組中,但尚不清楚何時保存它。 當用戶在鍵盤上按下「返回」或當他們點擊「添加步驟」時,我可以保存每個文本字段文本,但是用戶可以在不按任何鍵盤的情況下關閉鍵盤。我應該在用戶進行endEditing時保存更改嗎? –

+0

保存textFieldDidChange方法中的更改... –

+0

好的。在這種情況下,我認爲應該是唯一一個照顧儲蓄的人。 –

0

你可以做到你想要的最安全的方式是

  1. 使用臨時數組作爲數據源。顯示錶格視圖時,創建保存的數組的副本。
  2. 始終將您對錶視圖所做的更改與臨時數據源(插入,編輯,刪除)同步。您可以在數組中爲空單元格設置一個空字符串。
  3. 如果您想保存更改,只需將臨時數組複製到保存的數組即可。一個簡單的任務就可以做。

至於文本更改,請確保您實施所需的委託方法。

我希望這有助於!

相關問題