我有一個表格視圖,其中兩個單元格有用戶可以輸入長數據的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的委託本身就是類。
「問題」是,只有在用戶點擊另一個單元格/字段,則文本存儲在全局字典。如果用戶在完成輸入文本後點擊「精細」按鈕(保存數據)而未觸及另一個字段,該怎麼辦?致命的零誤差引發。所以我想知道是否有辦法檢測用戶是否停止輸入,即使他仍在該單元格內,以便始終存儲內容。 這可能嗎?有沒有特別的方法來實現?
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)
}
}
}
}
可以手動設置你的字典數據時用戶按下「罰款」按鈕 –
是的,我曾想過那個,但是......我怎麼才能得到那個方法裏的細胞? –
你可以用tableView:cellForRowAtIndexPath(tag)得到它,它返回單元格 –