Отключить клавиатуру от другого контроллера представления - PullRequest
2 голосов
/ 25 марта 2019

Я использую SJSegmentedViewController , чтобы сделать мой контроллер представления сегментированным.

У меня есть один контроллер вида с именем PlaceReviewsVC, в который я добавил textView для просмотра. Для публикации этого обзора я добавляю Post экземпляр кнопки панели UIBarButtonItem в navigationItem.rightBarButtonItem в мой placeDetailSegmentController, который является экземпляром SJSegmentedViewController.

Теперь проблема в том, что, когда я нажимаю на кнопку записи, я не могу закрыть клавиатуру.

Я попробовал следующий код, чтобы добавить кнопку записи в контроллер сегментированного представления.

let headerVC = PlaceImagesVC.viewController()

let reviewVC = PlaceReviewsVC.viewController()
reviewVC.delegate = self
reviewVC.title = "Reviews"

let placeDetailSegmentController = SJSegmentedViewController()     
placeDetailSegmentController.delegate = self
placeDetailSegmentController.title = "Pedal Studio"
placeDetailSegmentController.headerViewController = headerVC
placeDetailSegmentController.segmentControllers = [reviewVC]
placeDetailSegmentController.headerViewHeight = 280
placeDetailSegmentController.selectedSegmentViewHeight = 2.0
placeDetailSegmentController.selectedSegmentViewColor = .white

let button = UIButton(type: .custom)
button.setImage(#imageLiteral(resourceName: "icon_back").withRenderingMode(.alwaysTemplate), for: .normal)
button.tintColor = .white
button.addTarget(self, action:#selector(backButtonTapped), for:.touchUpInside)
button.frame = CGRect(x: 0, y: 0, width: 20, height: 20)
button.contentMode = .scaleAspectFit
button.imageEdgeInsets = UIEdgeInsets(top: 5, left: 5, bottom: 5, right: 5)
let leftButton = UIBarButtonItem(customView: button)

placeDetailSegmentController.navigationItem.leftBarButtonItem = leftButton            

let btnPost = UIButton(type: .custom)
btnPost.setTitle("POST", for: .normal)
btnPost.addTarget(self, action:#selector(btnPostTapped), for:.touchUpInside)
btnPost.titleLabel?.setFont(Typography.getFont(.PoppinsMedium, size: 12.0), .white)
btnPost.setTitleColor(.menuColor, for: .normal)
btnPost.setTitleColor(.darkGray, for: .highlighted)
btnPost.contentMode = .scaleAspectFit
let rightButton = UIBarButtonItem(customView: btnPost)

placeDetailSegmentController.navigationItem.rightBarButtonItem = rightButton

self.navigationController?.pushViewController(placeDetailSegmentController, animated: true)

где внутри btnPostTapped метода я написал следующий код для отклонения клавиатуры. Но не сработало.

@objc func btnPostTapped() {
    self.view.endEditing(true)
}

Как я могу отключить клавиатуру от одного контроллера представления к другому?

Ответы [ 2 ]

3 голосов
/ 25 марта 2019

Вы должны изменить свой код для отклонения клавиатуры следующим образом:

@objc func btnPostTapped() {
    AppDelegate.shared.window?.endEditing(true)
}

База нашего приложения window, поэтому, когда вы выполняете какое-либо событие в окне, оно влияет на все приложение. Я надеюсь, что это решит вашу проблему.

1 голос
/ 25 марта 2019

Скрыть клавиатуру из любого места

UIApplication.shared.sendAction(#selector(UIApplication.resignFirstResponder), to: nil, from: nil, for: nil)

или

Получить требуемый экземпляр viewcontroller из иерархии навигации и переназначить клавиатуру как:

requiredViewController.textField.resignFirstResponder()

или

requiredViewController.view.endEditing(true)
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...