gpt4 book ai didi

ios - 当键盘按下并且点击 x 时,在 UISearchBar 上执行操作

转载 作者:塔克拉玛干 更新时间:2023-11-02 10:05:42 26 4
gpt4 key购买 nike

我有一个 UITableView,顶部有一个 UISearchBar,并且有一个不工作的特定要求。

我的 UISearchBar (showsCancelButton = NO) 上没有取消按钮,所以我完全依赖 UISearchBar 中的 x 来取消现有搜索。我依靠键盘的“搜索”按钮来关闭键盘(尽管在我的例子中它被称为“完成”)。

当用户在我的应用中搜索时,我禁用了一个导航栏按钮项,因为它会带来糟糕的用户体验,只有当搜索取消时,用户才会看到导航栏按钮项目回来。一切正常。

我有一个特殊的场景,但我无法解决。

1) 点击搜索栏输入文字

2)点击键盘上的DONE,键盘会消失

3) 键盘退出后,x 保留在 UISearchBar

4) 点击 UISearchBar 中的 x,SearchBar 中的文本消失, View 刷新

5) 此时,导航栏按钮应该再次启用,但没有。

代码:

- (void)searchBar:(UISearchBar *)searchBar textDidChange:(NSString *)searchText
{
self.timelineSearchBar.showsCancelButton = NO;
if ([searchText length] == 0)
{
[self.timelineSearchBar performSelector:@selector(resignFirstResponder)
withObject:nil
afterDelay:0];
}

我知道上面的代码是为了在按下 x 时关闭键盘,这很好。

在我的例子中,键盘已经被放弃了,所以我想要点击 x 来重新启用导航栏项目。

    self.addButton.enabled = YES; 

因为上面的 if 语句根本没有做任何事情,导航栏项目仍然被禁用。

我什至在 if 语句中尝试过:

[self.timelineSearchBar performSelector:@selector(enableAdd)
withObject:nil
afterDelay:0];

- (void)enableAdd
{
self.addButton.enabled = YES;
}

但是崩溃说 searchBar 没有响应那个 enableAdd 选择器。

我做了一个断点,当我点击 x 时,上面的 if 语句评估为真,它进入语句,它“运行”代码以启用按钮,但它从未发生。

另外我的最终编辑方法是:

- (void)searchBarTextDidEndEditing:(UISearchBar *)searchBar
{
[searchBar setShowsCancelButton:NO animated:YES];
self.addButton.enabled = YES;
}

更新:我试过这里的链接 http://engineeringtheworld.wordpress.com/2011/04/11/detecting-when-clear-is-clicked-in-uisearchbar-x-button/没有成功 - 没有调用 textField 的 shouldClear 方法。我使用的是 iOS 7,所以也许还有另一种方法可以将 View 嵌入到 textFields 中?这很可能是正确的方法,但它不适用于我的代码,因为该示例中的 for 语句从未被评估为 true(我放入了 NSLog)。

更新 2:在上面的 if 语句中,我调用了 searchBarCancelButton 方法并且导致了极端循环,所以这当然不是正确的方法:

[self performSelector:@selector(searchBarCancelButtonClicked:) withObject:self.timelineSearchBar afterDelay: 0];

任何关于这方面的指导将不胜感激。我知道我错过了一个关键步骤,但我就是想不通。

最佳答案

问题是当点击 X 按钮时,searchBar:textDidChange: 被调用之前 searchBarShouldBeginEditing:

即这是调用流程:searchBar:textDidChange: -> searchBarShouldBeginEditing: -> searchBarTextDidBeginEditing: -> searchBarTextDidEndEditing:

textDidChange 将启用设置为 YES,但随后 shouldBeginEditing 再次将其禁用。这非常适合我:

-(void)searchBarTextDidBeginEditing:(UISearchBar *)searchBar
{
self.addButton.enabled = NO;
}

-(void)searchBarTextDidEndEditing:(UISearchBar *)searchBar
{
if(searchBar.text.length == 0){
self.addButton.enabled = YES;
}
}

-(void)searchBar:(UISearchBar *)searchBar textDidChange:(NSString *)searchText
{
if ([searchText length] == 0)
{
[searchBar performSelector:@selector(resignFirstResponder) withObject:nil afterDelay:0];
}
}

-(void)searchBarSearchButtonClicked:(UISearchBar *)searchBar
{
self.addButton.enabled = [searchBar.text length] == 0;
[searchBar resignFirstResponder];
}

关于ios - 当键盘按下并且点击 x 时,在 UISearchBar 上执行操作,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/22936858/

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