ios - 有没有办法让当前未呈现的视图的第一响应者辞职?
问题描述
这是这种情况:
a 的根视图控制器UINavigationController
有一个搜索栏。当用户搜索某些内容时,他们可以点击一个单元格,该单元格将一个新的视图控制器推送到带有一些信息的导航控制器上。发生这种情况时,预期的行为是让用户能够返回并仍然看到键盘打开,并且在搜索栏中填充了最新的搜索查询。
但是,还有一种情况,用户可能会点击一个标签栏,该标签栏应该从导航控制器中弹出除根控制器之外的所有视图控制器。在这种情况下,我想在根控制器出现之前textField
辞去 search bar的第一响应者。如果我尝试在 中执行此操作,则会失败。viewWillAppear(_:)
resignFirstResponder()
这可能吗?我尝试过使用委托和通知,但似乎没有任何效果。
解决方案
正如@Sweeper 所说,endEditing
为我工作,但resignFirstResponder
没有。我执行viewWillAppear
:
import PlaygroundSupport
import UIKit
class ViewController: UIViewController {
let button = UIButton()
let searchBar = UISearchBar()
override func viewDidLoad() {
super.viewDidLoad()
button.setTitle("Button", for: .normal)
button.tag = 1
button.addTarget(self, action: #selector(buttonPressed), for: .touchUpInside)
button.backgroundColor = .black
self.view.addSubview(button)
button.translatesAutoresizingMaskIntoConstraints = false
self.navigationItem.titleView = searchBar
NSLayoutConstraint.activate([
button.centerYAnchor.constraint(equalTo: self.view.centerYAnchor),
button.centerXAnchor.constraint(equalTo: self.view.centerXAnchor),
button.widthAnchor.constraint(equalToConstant: 200),
button.heightAnchor.constraint(equalToConstant: 100),
])
}
@objc func buttonPressed(sender: UIButton) {
if case let tag = sender.tag, tag == 1 {
let secondVC = SecondVC()
self.navigationController?.pushViewController(secondVC, animated: true)
}
}
}
class SecondVC: UIViewController {
override func viewDidLoad() {
super.viewDidLoad()
self.view.backgroundColor = .yellow
}
override func viewWillAppear(_ animated: Bool) {
super.viewWillAppear(animated)
self.navigationController?.view.endEditing(true)
}
}
let navVC = UINavigationController(rootViewController: ViewController())
PlaygroundPage.current.needsIndefiniteExecution = true
PlaygroundPage.current.liveView = navVC
推荐阅读
- ios - 填充 UIScrollView 的垂直空间
- r - ggplot2 - 差异 X 轴
- jquery - 结合两个 KendoUI Jquery 脚本
- c# - 如何获取视频流并保存在磁盘上 c# Xamarin iOS
- angularjs - 在openlayers3中使用WFST更新属性信息
- node.js - 套接字 io 上的 Keycloak 身份验证
- sql - 为什么不使用 GIN 索引?
- c# - 部署后的 .NET Core PartialAsync 异常
- django - 未找到带有参数 '('',)' 的 'post_share' 的反向操作。尝试了 2 种模式:['blog\\/(?P
[0-9]+)\\/share\\/$', '博客\\/post_share\\/$'] - apache-flink - Apache Flink:注册名称冲突。名称为 *** 的 KvState 已被其他运营商注册