从另一个视图控制器关闭键盘

Dismiss Keyboard from Another View Controller

我正在使用 SJSegmentedViewController 使我的视图控制器分段。

我有一个名为 PlaceReviewsVC 的视图控制器,我在其中添加了 textView 以供审核。对于 post 这篇评论,我在我的 placeDetailSegmentController 中的 navigationItem.rightBarButtonItem 添加了 Post UIBarButtonItem 的条形按钮实例,这是 SJSegmentedViewController 的实例。

现在的问题是当我点击 post 按钮时,我无法关闭键盘。

我已尝试使用以下代码在分段视图控制器中添加 post 按钮。

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)
}

How can I dismiss keyboard from one view controller to another?

您应该更改代码以关闭键盘,如下所示:

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

我们的应用程序的基础是 window,因此当您在 window 上执行任何事件时,它会影响整个应用程序。我希望这会解决您的问题。

从任何地方隐藏键盘

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

从导航层次结构中获取所需的 viewcontroller 实例并将键盘重新设计为:

requiredViewController.textField.resignFirstResponder()

requiredViewController.view.endEditing(true)