2015-09-17 36 views
1

我有一個表格視圖,其中兩個單元格有用戶可以輸入長數據的UITextView。在#1這裏以下一些答案,我實現了一個協議/委託檢測,當用戶完成輸入,然後將被保存在一個全局字典中的數據:Swift:熱檢測用戶編輯已停止在UITextView

class DetailsNewTaskViewController: UITableViewController, TextViewCellDelegate { 

var cellData:[String:String] = [:] 

func controllerView(controller: UITableViewCell, textViewDidEndEditing: String, atIndex:Int) { 

     switch(atIndex) { 
      case 0: 
       self.cellData["titolo"] = (controller as! LittleTextCell).textView.text 
       break 
      case 1: 
       self.cellData["oggetto"] = (controller as! BigTextCell).textView.text 
       break 
      default: 
       break 
     } 
} 

,這是相對的自定義單元格類:

class LittleTextCell: UITableViewCell, UITextViewDelegate { 
    @IBOutlet weak var label : UILabel! 
    @IBOutlet weak var textView : UITextView! 
    var delegate:TextViewCellDelegate? 
    var rowIndex:Int? 

    func textViewDidEndEditing(textView: UITextView) { 
    delegate?.controllerView(self, textViewDidEndEditing: textView.text, atIndex: rowIndex!) 
    } 
} 

其中textView的委託本身就是類。

這是應用程序的截圖: enter image description here

「問題」是,只有在用戶點擊另一個單元格/字段,則文本存儲在全局字典。如果用戶在完成輸入文本後點擊「精細」按鈕(保存數據)而未觸及另一個字段,該怎麼辦?致命的零誤差引發。所以我想知道是否有辦法檢測用戶是否停止輸入,即使他仍在該單元格內,以便始終存儲內容。 這可能嗎?有沒有特別的方法來實現?

UPDATE

func saveTask(sender:UIButton!) { 

    self.dateFormatter.dateFormat = "yyyy-MM-dd" 

    var taskToSave = Task(id: -1, 
          titolo: self.cellData["titolo"]!, 
          oggetto: self.cellData["oggetto"]!, 
          check_mail: self.cellData["check_mail"]!.toBool()!, 
          id_progetto: self.projects[self.cellData["progetto_nome"]!]!.id, 
          progetto_nome: nil, 
          assegnato_a: nil, 
          id_assegnato_a: self.users[self.cellData["assegnato_a"]!]!.id, 
          richiesto_da: nil, 
          id_richiesto_da: self.users[self.cellData["richiesto_da"]!]!.id, 
          priorita: self.cellData["priorita"]!, 
          termine_consegna: self.dateFormatter.dateFromString(self.cellData["termine_consegna"]!)!, 
          stato: self.cellData["stato"]!) 

     self.taskService.addTaskService(taskToSave) { 
     (response: String) in 

     if ((response.rangeOfString("Could not connect to the server.")) != nil) { 
      dispatch_async(dispatch_get_main_queue()) { 
       self.alertView.title = "Operazione fallita!" 
       self.alertView.message = "Impossibile connettersi al server. \n Riprovare." 
       self.alertView.delegate = self 
       self.alertView.addButtonWithTitle("OK") 
       self.alertView.show() 
      } 
      println(response) 
     } 

     else { 
      if ((response.rangeOfString("status code: 200")) != nil) { 
       dispatch_async(dispatch_get_main_queue()) { 
        self.alertView.title = "Operazione eseguita!" 
        self.alertView.message = "Task creato correttamente" 
        self.alertView.delegate = self 
        self.alertView.addButtonWithTitle("OK") 
        self.alertView.show() 

        self.navigationController?.popViewControllerAnimated(true) 
       } 
      } 

      else { 
       println(response) 
      } 

     } 
    } 
} 
+2

可以手動設置你的字典數據時用戶按下「罰款」按鈕 –

+0

是的,我曾想過那個,但是......我怎麼才能得到那個方法裏的細胞? –

+1

你可以用tableView:cellForRowAtIndexPath(tag)得到它,它返回單元格 –

回答

1

只使用在該法測得的頂這條線在你的控制器

self._tableView.superview?.endEditing(true); 

我面臨着同樣的方式進行:與「微調」按鈕的功能問題,我的單元格textfields,我想檢查控制器中的所有字段。當我得到我的數據,所以最後的數據不是最新的,因爲在最後的數據後,我點擊不在文本字段上的按鈕。所以我找到了解決方案。在獲得我的字典之前,我在我的方法中寫了這行(在你的情況下,這行應該是很好的方法),之後我更新了數據。 感謝

+0

謝謝隊友,太感謝你我真的希望就是這麼簡單......我,只要我完成了我的代碼重構試試! –

+0

好的。如果它不起作用,請在這裏回覆我。謝謝(Y) –

1

定義全局selectedIndexPath

var selectedIndexPath:Int = 0 

將其設置爲選擇indexPath

func controllerView(controller: UITableViewCell, textViewDidEndEditing: String, atIndex:Int) { 
     selectedIndexPath = indexPath 
     switch(atIndex) { 
      case 0: 
       self.cellData["titolo"] = (controller as! LittleTextCell).textView.text 
       break 
      case 1: 
       self.cellData["oggetto"] = (controller as! BigTextCell).textView.text 
       break 
      default: 
       break 
     } 
} 

在saveTask功能得到電池用的cellForRowAtIndexPath

func saveTask(sender:UIButton!) { 

     let cell = tableView.cellForRowAtIndexPath(selectedIndexPath) 
     self.cellData["titolo"] = cell.LittleTextCell.textView.text 
     self.cellData["oggetto"] = cell.BigTextCell.textView.text 
    } 
+0

PS。 selectedIndexPath = indexPath應該是當用戶開始編輯文本肯定 –

+0

謝謝你的心臟隊友!我會盡快完成我的代碼重構! –