编辑文本字段时,使用键盘和工具栏显示uitextview

时间:2018-07-15 17:00:33

标签: swift uitextfield uitextview inputaccessoryview inputview

enter image description here

实现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
}

enter image description here

2 个答案:

答案 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将为您填充它们。