Ios UIAlert,带文本字段至表格
我的目标是在主视图中的表中创建一个新行,标题为使用存储在Ios UIAlert,带文本字段至表格,ios,uitableview,swift,ios8,Ios,Uitableview,Swift,Ios8,我的目标是在主视图中的表中创建一个新行,标题为使用存储在namePrompt中的UIAlert输入。我将如何实现这一点 目前,当我试图换一行时(使用iPad模拟器右上角的+按钮,运行iOS 8),应用程序会崩溃。我真的不确定我做错了什么,任何帮助都是感激的 代码: 我认为问题是由let childName:Any Object行和/或objects.insertObject行引起的 --编辑-- 当我构建/运行项目时,代码中没有错误,但是当我尝试添加新行时,只要我按下+按钮,我就会从线程1获得0
namePrompt
中的UIAlert输入。我将如何实现这一点
目前,当我试图换一行时(使用iPad模拟器右上角的+
按钮,运行iOS 8),应用程序会崩溃。我真的不确定我做错了什么,任何帮助都是感激的
代码:
我认为问题是由let childName:Any Object
行和/或objects.insertObject
行引起的
--编辑--
当我构建/运行项目时,代码中没有错误,但是当我尝试添加新行时,只要我按下+
按钮,我就会从线程1
获得0x1fbaff4:nopw%cs:(%eax,%eax)
。这与行let object=objects[indexPath.row]as NSDate
(在下面的代码片段中)相关(上面的objects.insertObject
行的默认值是NSDate)。我将NSDate
更改为NSString
,同样的事情发生了
override func tableView(tableView: UITableView, cellForRowAtIndexPath indexPath: NSIndexPath) -> UITableViewCell {
let cell = tableView.dequeueReusableCellWithIdentifier("Cell", forIndexPath: indexPath) as UITableViewCell
let object = objects[indexPath.row] as NSString
cell.textLabel?.text = object.description
return cell
}
您似乎假设UIAlertController的文本字段将在警报出现后立即填充。这并没有给用户任何时间来实际填写字段 将
let childName=namepropt.textFields![0]
在一个按钮操作中单击一行(及以下),然后等待用户点击该按钮,然后再读取文本字段
--编辑--
这是我建议修改的代码。我对您的代码做了尽可能少的更改。注意,有一个if语句来防止空的子名称,但它不会防止有人进入一堆空格。您可能应该使该部分更坚固
func insertNewObject(sender: AnyObject) {
//prompt for kid name
var namePrompt = UIAlertController(title: "Add Child", message: "Please enter child name", preferredStyle: UIAlertControllerStyle.Alert)
namePrompt.addAction(UIAlertAction(title: "Cancel", style: UIAlertActionStyle.Cancel, handler: nil))
namePrompt.addAction(UIAlertAction(title: "Add Child", style: UIAlertActionStyle.Default, handler: { (alertAction) in
let childName = (namePrompt.textFields![0] as UITextField).text as String
if childName != "" {
self.objects.insert(childName, atIndex: 0)
let indexPath = NSIndexPath(forRow: 0, inSection: 0)
self.tableView.insertRowsAtIndexPaths([indexPath], withRowAnimation: .Automatic)
}
}))
namePrompt.addTextFieldWithConfigurationHandler({(textField: UITextField!) in
textField.placeholder = "Johnny"
})
self.presentViewController(namePrompt, animated: true, completion: nil)
}
使用有关崩溃的详细信息更新您的问题,包括完整的错误消息,并指出导致崩溃的行。在
addAction
的handler
点中,对于“addchild”,这是有意义的。在用户点击添加子对象按钮之前,您可能不想读取该值,对吗?我用上述代码替换了insertNewObject
函数(谢谢),UIAlert正确打开,但当我按add child
时,UIAlert消失,键盘保持显示,并且没有添加新行。知道为什么吗?它还给了我线程1调试器中的0x2052ff4:nopw%cs:(%eax,%eax)
(或者我假设的调试器?)问题是textFields[0]不是字符串,而是UITextField。你必须深入挖掘才能找到真正的文本。我将编辑以上答案。
func insertNewObject(sender: AnyObject) {
//prompt for kid name
var namePrompt = UIAlertController(title: "Add Child", message: "Please enter child name", preferredStyle: UIAlertControllerStyle.Alert)
namePrompt.addAction(UIAlertAction(title: "Cancel", style: UIAlertActionStyle.Cancel, handler: nil))
namePrompt.addAction(UIAlertAction(title: "Add Child", style: UIAlertActionStyle.Default, handler: { (alertAction) in
let childName = (namePrompt.textFields![0] as UITextField).text as String
if childName != "" {
self.objects.insert(childName, atIndex: 0)
let indexPath = NSIndexPath(forRow: 0, inSection: 0)
self.tableView.insertRowsAtIndexPaths([indexPath], withRowAnimation: .Automatic)
}
}))
namePrompt.addTextFieldWithConfigurationHandler({(textField: UITextField!) in
textField.placeholder = "Johnny"
})
self.presentViewController(namePrompt, animated: true, completion: nil)
}