我有一个表视图,其中两个单元格具有UITextView,用户可以在其中输入长数据。在Stackoverflow中的一些答案之后,我实现了一个协议/委托,以检测用户何时完成输入数据,然后将其保存在全局字典中:
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的委托是类本身。
“问题”是只有在用户点击另一个单元格/字段之后,文本才会存储在全局字典中。如果用户在完成输入文本后点击“精确”按钮(保存数据)而没有触及另一个字段,该怎么办?这是一个致命的零错误。所以我想知道是否有一种方法来检测用户是否已经停止输入,即使他仍然在该单元格内,以便始终存储内容。 可能吗?有没有特定的方法来实现?
更新:与“精细”按钮关联的功能:
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)
}
}
}
}
答案 0 :(得分:1)
只需在控制器中的方法中使用此行
self._tableView.superview?.endEditing(true);
我遇到了同样的问题,我在单元格中的文本字段,我想检查控制器中的所有字段。当我得到我的数据,所以最后的数据不是最新的,因为在最后的数据后,我点击按钮不在文本字段。所以我找到了解决方案。在我获取字典之前,我在我的方法中写了这一行(在你的情况下,这行应该是精细的方法),之后我更新了数据。 感谢
答案 1 :(得分:1)
定义全局<PID>
selectedIndexPath
将其设置为选定的indexPath
var selectedIndexPath:Int = 0
在saveTask函数中,使用cellForRowAtIndexPath获取单元格
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
}
}