gpt4 book ai didi

iphone - UISearchbar clearButton 强制键盘出现

转载 作者:行者123 更新时间:2023-12-03 18:12:06 25 4
gpt4 key购买 nike

我有一个 UISearchBar,它充当 TableView 的实时过滤器。当通过 endEditing: 关闭键盘时,查询文本和灰色圆形“清除”按钮仍然存在。从这里开始,如果我点击灰色的“清除”按钮,键盘会在文本被清除时重新出现。

如何防止这种情况发生?如果键盘当前未打开,我希望该按钮清除文本而不重新打开键盘。

当我点击清除按钮时,会调用一个协议(protocol)方法。但是向 UISearchBar 发送 resignFirstResponder 消息不会对键盘产生任何影响。

最佳答案

这是一个老问题,我刚刚遇到了同样的问题并设法通过以下方式解决它:

当 UISearchBarDelegate 的 searchBar:textDidChange: 方法因用户点击“清除”按钮而被调用时,searchBar 尚未成为第一响应者,因此我们可以利用这是为了检测用户实际上何时打算清除搜索而不是将焦点转移到搜索栏和/或执行其他操作。

为了跟踪这一点,我们需要在 viewController 中声明一个 BOOL ivar,它也是 searchBar 委托(delegate)(我们称之为 shouldBeginEditing),并使用YES 的初始值(假设我们的 viewController 类名为 SearchViewController):

@interface SearchViewController : UIViewController <UISearchBarDelegate> {
// all of our ivar declarations go here...
BOOL shouldBeginEditing;
....
}

...
@end



@implementation SearchViewController
...
- (id)initWithNibName:(NSString *)nibNameOrNil bundle:(NSBundle *)nibBundleOrNil {
if ((self = [super initWithNibName:nibNameOrNil bundle:nibBundleOrNil])) {
...
shouldBeginEditing = YES;
}
}
...
@end

随后,在 UISearchBarDelegate 中,我们实现了 searchBar:textDidChange:searchBarShouldBeginEditing: 方法:

- (void)searchBar:(UISearchBar *)bar textDidChange:(NSString *)searchText {
NSLog(@"searchBar:textDidChange: isFirstResponder: %i", [self.searchBar isFirstResponder]);
if(![searchBar isFirstResponder]) {
// user tapped the 'clear' button
shouldBeginEditing = NO;
// do whatever I want to happen when the user clears the search...
}
}


- (BOOL)searchBarShouldBeginEditing:(UISearchBar *)bar {
// reset the shouldBeginEditing BOOL ivar to YES, but first take its value and use it to return it from the method call
BOOL boolToReturn = shouldBeginEditing;
shouldBeginEditing = YES;
return boolToReturn;
}

基本上就是这样。

最佳

关于iphone - UISearchbar clearButton 强制键盘出现,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/1092246/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com