becomeFirstResponder() 不起作用
Posted
技术标签:
【中文标题】becomeFirstResponder() 不起作用【英文标题】:becomeFirstResponder() does not work 【发布时间】:2016-01-03 23:23:38 【问题描述】:我目前正在尝试创建一个类似于 Apple 提醒 的待办事项应用程序。现在,当我通过单击UIButton
添加新任务时,会创建一个包含UITextfield
的新单元格并将其分配为第一响应者。但是,当我这样做时,键盘按预期显示,但没有光标,也无法编辑。当我再次单击文本字段时,我可以按预期进行编辑。
任何帮助将不胜感激。
@IBAction func addTask(sender: UIBarButtonItem)
// Add a new task
let newIndexPath = NSIndexPath(forRow: tasks.count, inSection: 0)
let task = Task(name: "")!
tasks.append(task)
tableView.insertRowsAtIndexPaths([newIndexPath], withRowAnimation: .Bottom)
let cellIdentifier = "TaskTableViewCell"
let cell = tableView.dequeueReusableCellWithIdentifier(cellIdentifier, forIndexPath: newIndexPath) as! TaskTableViewCell
let db_Task = PFObject(className: "Task")
db_Task["TaskName"] = ""
db_Task["Completed"] = false
db_Task["group"] = getGroupId()
db_Task.saveInBackgroundWithBlock
(success: Bool, error: NSError?) -> Void in
print("Object has been saved.")
cell.nameLabel.becomeFirstResponder()
【问题讨论】:
nameLabel 是您的文本字段吗?刚想到名字…… 【参考方案1】:tableView.insertRowsAtIndexPaths([newIndexPath], withRowAnimation: .Bottom)
let cellIdentifier = "TaskTableViewCell"
let cell = tableView.dequeueReusableCellWithIdentifier(cellIdentifier, forIndexPath: newIndexPath) as! TaskTableViewCell
你不能通过'dequeue'方法得到插入的单元格。切勿从cellForIndexPath
中调用此方法。插入后你应该这样做:
let cell = tableView.cellForIndexPath(indexPath)
【讨论】:
一旦我这样做了,我只能做 cell.textLabel.becomeFirstResponder() 还是不行 @KennyTao 插入后你删除了原来的下两行吗? 我想通了。我必须将我的单元格设置为我的自定义单元格类名称,您的建议非常有效!非常感谢:)【参考方案2】:你可以试试
self.view.endEditing
【讨论】:
【参考方案3】:BecomeFirstResponder 应该在您想要聚焦的对象上调用。在这种情况下,cell.nameLabel
是错误的对象。
你应该打电话给cell.[your_text_field]
。
【讨论】:
nameLabel 是我的文本字段的名称,应该澄清以上是关于becomeFirstResponder() 不起作用的主要内容,如果未能解决你的问题,请参考以下文章
UITextField becomeFirstResponder 在 UIControlEventEditingDidEndOnExit 中不起作用
在 iOS 6 中,-[UITextField becomeFirstResponder] 在 -viewWillAppear 中不起作用:
ios8 UIAlertView becomeFirstResponder for Password UITextField 不起作用
应该总是在主线程上调用 becomeFirstResponder() 吗?
在 UITableViewController textfield.becomeFirstResponder() 中不滚动 tableview
在UITableViewController中textfield.becomeFirstResponder()不滚动tableview