实现gif中所见的正确方法是什么?这是带有文本字段的表格视图。当您点击文本框时,其键盘会显示一个文本视图。我有一个带有自定义tableviewcell和textfield(valueTextField)的tableview。在cellforrow中,我将文本字段的inputview设置为UITextView。当我按文本字段时,textview应该显示在顶部的工具栏(带有“完成”按钮),但没有工具栏显示。当我点击textview时,仍然没有工具栏。
func tableView(_ tableView: UITableView, cellForRowAt indexPath: IndexPath) -> UITableViewCell {
let cell = tableView.dequeueReusableCell(withIdentifier: "cellId", for: indexPath) as! EditProfileTableViewCell
cell.isUserInteractionEnabled = true
cell.valueTextField.isUserInteractionEnabled = true
cell.valueTextField.delegate = self
toolBar = UIToolbar()
toolBar.sizeToFit()
let doneButton = UIBarButtonItem(title: "Done", style: UIBarButtonItemStyle.plain, target: self, action: #selector(editorDone))
toolBar.setItems([doneButton], animated: false)
editorTextView = UITextView(frame: CGRect(x:0, y:0, width:view.bounds.width, height:view.bounds.height))
cell.valueTextField.inputAccessoryView = toolBar
cell.valueTextField.inputView = editorTextView
return cell
}
答案 0 :(得分:2)
您要更改的代码很少。
1)此视图的框架导致了这种奇怪的行为:
UITextView(frame: CGRect(x:0, y:0, width:view.bounds.width, height:view.bounds.height))
2)之所以犯此错误,是因为您感到困惑
.inputAccessoryView
.inputView
3)您发布的gif基于navigationBar按钮。基本上,通过点击单元格,它会显示一个detailsViewController,并在navigationBar中设置了两个项目
答案 1 :(得分:2)
您显示的示例只是在轻按单元格时使用UINavigationController
导航到单独的UIViewController
。在此视图控制器中,将UITextField
像这样处理。
// View controller subclass conforming to UITextFieldDelegate protocol
class MyDetailViewController: UIViewController, UITextFieldDelegate {
// Set an IB Outlet to the text field in storyboard
@IBOutlet myTextField: UITextField!
override viewDidLoad() {
myTextField.delegate = self
// ToolBar
let toolBar = UIToolbar()
// Optional styling
toolBar.barStyle = .default
toolBar.isTranslucent = true
toolBar.tintColor = .black
toolBar.layer.borderWidth = 0
toolBar.sizeToFit()
// Buttons
let buttonOne = BarButtonItem(title: "One", style: .plain, target: self, action: #selector(yourSelectorOne(_:)))
let buttonTwo = BarButtonItem(title: "One", style: .plain, target: self, action: #selector(yourSelectorTwo(_:)))
let spacer = UIBarButtonItem(barButtonSystemItem: .flexibleSpace, target: nil, action: nil)
toolBar.setItems([buttonOne, spacer, buttonTwo], animated: false)
toolBar.isUserInteractionEnabled = true
textField.inputAccessoryView = toolBar
}
}
这将创建两个按钮,一个在工具栏的左侧,另一个在工具栏的右侧。可以在Interface Builder中设置键盘的类型。
要通过直接点击单元格中的文本字段而无需导航到新的视图控制器来实现此目的,可以将自定义UITableViewCell
子类设置为文本字段委托。
请注意,您将需要提供方法存根以符合UITextFieldDelegate
协议。这些对于本示例不是必需的,因此我省略了它们。 XCode将为您填充它们。