处理有多个字段的登录表单。当用户点击键盘的下一个/完成(默认按钮)按钮时,下一个文本字段应成为第一响应者。 TextField位于UITableView Cell中。当用户单击完成按钮时,我获取下一个单元格并将其textfield作为第一响应者。但是如果下一个单元格不可见,则下一个textField不会成为第一响应者。如何解决这个问题。
func makeTextFieldFirstResponder(textField:UITextField) -> Bool {
let row = textField.tag
let indxPath = IndexPath(row: textField.tag + 1, section: 0)
if let cell = tblEditViewDetail.cellForRow(at: indxPath) as? InputCell {
cell.txtField.firstResponder()
}
}
答案 0 :(得分:3)
表示表格单元格的对象,如果单元格不可见或indexPath超出范围,则为nil。
因此,如果单元格不可见,则返回值应为nil
。您应首先使用scrollToRow
,然后获取单元格并设置第一响应者。
答案 1 :(得分:1)
让我们做一个技巧。
1)使用第一响应者保存您的下一个文本字段索引。
var respondTextFieldIndex: Int = 0
func makeTextFieldFirstResponder(textField:UITextField) -> Bool {
let row = textField.tag
let indxPath = IndexPath(row: textField.tag + 1, section: 0)
respondTextFieldIndex= textField.tag + 1
if let cell = tblEditViewDetail.cellForRow(at: indxPath) as? InputCell {
cell.txtField.firstResponder()
}
2)在cellForRow
函数中,如果您的下一个单元格的索引等于respondTextFieldIndex
,请设置它firstResponder
override func tableView(_ tableView: UITableView, cellForRowAt indexPath: IndexPath) -> UITableViewCell
{
let cell = *Your work here*.
if indexPath.row == respondTextFieldIndex {
cell.txtField.firstResponder()
}
}
答案 2 :(得分:-1)
使用下面的代码可以使用此代码。
func tableView(_ tableView: UITableView, numberOfRowsInSection section: Int) -> Int {
// #warning Incomplete implementation, return the number of rows
return arrData.count
}
func tableView(_ tableView: UITableView, cellForRowAt indexPath: IndexPath) -> UITableViewCell {
let cell = tableView.dequeueReusableCell(withIdentifier: "AddEventCell", for: indexPath) as! AddEventCell
cell.txtName.tag = indexPath.row
cell.txtName.delegate = self
// Configure the cell...
return cell
}
public func textFieldShouldReturn(_ textField: UITextField) -> Bool
{
if textField.tag < arrData.count - 1 {
textField.resignFirstResponder()
tbl.viewWithTag(textField.tag+1)?.becomeFirstResponder()
}
else
{
textField.resignFirstResponder()
}
return true
}