Fab*_*bio 17 xcode delegates uisearchbar ios
按'x'按钮时如何处理事件?
我尝试这种方法但不起作用.
-(void)searchBarCancelButtonClicked:(UISearchBar *)searchBar{
}
Run Code Online (Sandbox Code Playgroud)
Eri*_*son 25
我认为没有一种简单的方法来挂钩X按钮.
但是,您可以直接考虑其结果:清除文本.
试试这个:
func searchBar(searchBar: UISearchBar, textDidChange searchText: String) {
if searchText == "" {
print("UISearchBar.text cleared!")
}
}
Run Code Online (Sandbox Code Playgroud)
副作用是当您手动清除文本时也会调用它.
Ked*_*kar 11
斯威夫特 5.2,Xcode 11.4
这个对我有用。
if let searchTextField = self.categoriesSearchBar.value(forKey: "searchField") as? UITextField , let clearButton = searchTextField.value(forKey: "_clearButton")as? UIButton {
clearButton.addTarget(self, action: #selector(self.yourFunction), for: .touchUpInside)
}
Run Code Online (Sandbox Code Playgroud)
eja*_*a08 11
正如Apple 文档textFieldShouldClear(_:)
中所述UITextFieldDelegate
,.
文本字段调用此方法来响应用户按下内置清除按钮。
所以
UITextFieldDelegate
searchBar
设置您的文本字段的委托textFieldShouldClear(_:)
方法class MyClass: UITextFieldDelegate {
weak var seachBar: UISearchBar!
override func viewDidLoad() {
if #available(iOS 13.0, *) {
searchBar.searchTextField.delegate = self
} else {
searchBar.textField.delegate = self
}
}
func textFieldShouldClear(_ textField: UITextField) -> Bool {
// your code
return true
}
}
Run Code Online (Sandbox Code Playgroud)
fun*_*ct7 10
一个相当hacky的方式,但这是有效的.
private var didTapDeleteKey = false
func searchBar(_ searchBar: UISearchBar,
shouldChangeTextIn range: NSRange,
replacementText text: String) -> Bool
{
didTapDeleteKey = text.isEmpty
return true
}
func searchBar(_ searchBar: UISearchBar,
textDidChange searchText: String)
{
if !didTapDeleteKey && searchText.isEmpty {
// Do something here
}
didTapDeleteKey = false
}
Run Code Online (Sandbox Code Playgroud)
此代码的成功取决于点击搜索栏的清除按钮时searchBar(_:shouldChangeTextIn:replacementText:) -> Bool
未调用的事实.相反,当点击键盘的删除按钮时,调用该方法.
小智 7
Swift 5.0 中最简单的解决方案
func searchBar(_ searchBar: UISearchBar, textDidChange searchText: String) {
if searchText.isEmpty {
DispatchQueue.main.asyncAfter(deadline: .now() + 0.1) {
searchBar.resignFirstResponder()
}
}
}
Run Code Online (Sandbox Code Playgroud)
小智 4
我遇到了同样的问题,尝试通过访问 searchBar 的子视图 textField 来解决它,但它导致我的应用程序崩溃,最后一次努力我找到了这篇文章。
另一个问题是,
- (void)searchBar:(UISearchBar *)searchBar textDidChange:(NSString *)searchText
单击取消按钮时被调用两次,另请参阅此。
最后我所做的是;
- (void)searchBar:(UISearchBar *)searchBar textDidChange:(NSString *)searchText
{
if (![searchText isEqualToString:self.searchText]) {
self.searchText = searchText;
return;
}
NSLog(@"Clear clicked");
}
Run Code Online (Sandbox Code Playgroud)
这解决了我的问题。
归档时间: |
|
查看次数: |
21579 次 |
最近记录: |