делегат между представлением и представлением контроллера - PullRequest
0 голосов
/ 30 мая 2019

У меня есть UIView и ViewControllerUIView у меня есть UITextField, и мне нужно использовать делегата, чтобы я мог отклонить клавиатуру, нажав кнопку «Готово».Проблема в том, что я не могу использовать UITextViewDelegate в UIView и не могу получить доступ к текстовому полю в UIView из ViewController.Как мне добавить делегата, чтобы я мог отклонить свое текстовое поле?

ViewController:

import UIKit


class LoginVC: UIViewController, UITextViewDelegate {
override func loadView() {
    super.loadView()
    self.view = BaseView()
}
override func viewDidLoad() {
    super.viewDidLoad()
    self.tabBarController?.navigationController?.setNavigationBarHidden(true, animated: false)

    navigationItem.title = "LoginVC"
    navigationController?.navigationBar.barTintColor = UIColor.appBlue
    navigationController?.navigationBar.barStyle = .black
    navigationController?.navigationBar.titleTextAttributes = [.foregroundColor: UIColor.appWhite]
    navigationItem.rightBarButtonItem?.tintColor = UIColor.appWhite

    let btnImage = UIImageView(image: UIImage(named: "Help"))
    btnImage.changeImageColor(color: UIColor.appWhite)

    //TODO: Change the btnImage to color white!
    let helpButton = UIButton(frame: CGRect(x: 0, y: 0, width: 25, height: 25))
    helpButton.setImage(btnImage.image, for: .normal)
    helpButton.addTarget(self, action: #selector(showHelpPopup), for: .touchUpInside)
    self.navigationItem.rightBarButtonItem = UIBarButtonItem(customView: helpButton)

}

@objc func showHelpPopup(){

}
}

Просмотр:

import UIKit

public final class BaseView: UIView, UITextFieldDelegate {
public override init(frame: CGRect) {
    super.init(frame: frame)
    self.addSubview(masterStackView)

    self.backgroundColor = UIColor.white
    NSLayoutConstraint.activate([
        masterStackView.centerXAnchor.constraint(equalTo: self.centerXAnchor),
        masterStackView.centerYAnchor.constraint(equalTo: self.centerYAnchor),
        masterStackView.leadingAnchor.constraint(lessThanOrEqualToSystemSpacingAfter: self.leadingAnchor, multiplier: 0.2),
        masterStackView.trailingAnchor.constraint(lessThanOrEqualToSystemSpacingAfter: self.trailingAnchor, multiplier: -0.2),
        masterStackView.heightAnchor.constraint(equalToConstant: 100),
    ])
}

required init?(coder aDecoder: NSCoder) {
    fatalError("init(coder:) has not been implemented")
}

public let addCommentTextField: UITextField = {
    let text = UITextField(frame: CGRect(x: 0, y: 0, width: 0, height: 30))

    text.placeholder = "Comment"
    text.font = UIFont.systemFont(ofSize: 14, weight: .bold)
    text.borderStyle = UITextField.BorderStyle.roundedRect
    text.autocorrectionType = UITextAutocorrectionType.no
    text.keyboardType = UIKeyboardType.default
    text.returnKeyType = UIReturnKeyType.done
    text.clearButtonMode = .always
    text.contentHorizontalAlignment = .left

    return text
}()

1 Ответ

1 голос
/ 30 мая 2019

Нет необходимости, вы можете сделать

self.view.endEditing(true)

Или

let vi = BaseView()
vi.addCommentTextField.delegate = self
self.view = vi
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...