iphone - 点击取消按钮时,移除 UISearchBar 右侧的清除按钮(灰色 x)

标签 iphone objective-c ipad interface-builder

好的,开始我的问题,下面是 Spotify 应用程序已经解决的问题的一些截图:

Spotify 的第 1 步:标准 UISearchBar 未处于编辑模式。

Step 1

Spotify 的第 2 步:UISearchBar 现在处于编辑模式。输入搜索词。取消按钮从右侧滑入,出现清除按钮(灰色x)。

Step 2

Spotify 的第 3 步: 按下取消按钮;键盘滑出,搜索栏不再处于编辑模式。搜索词保留,灰色 x 按钮现在隐藏

Step 3

目前,按下我的取消按钮时会触发以下代码:

- (void)searchBarCancelButtonClicked:(UISearchBar *)searchBar {
    [searchBar resignFirstResponder];
    [searchBar setShowsCancelButton:NO animated:YES];
}

结果是:

我的第 3 步:搜索栏现在不处于编辑模式。取消按钮和键盘已滑出。搜索字词保留,但灰色 x 也保留。

Problem

所以,我的问题是:考虑到 -resignFirstResponder(和 -endEditing:,仅供引用)隐藏灰色 x 按钮当搜索栏中输入了文本时,如何隐藏它?

再次感谢 friend 们。

最佳答案

问题是 UISearchBar 没有公开它的文本字段,而是管理文本字段本身的属性。有时,属性的值不是您想要的。

例如,在我自己的应用中,我希望搜索栏的键盘样式使用透明警报样式。

我的解决方案是遍历搜索栏的 subview ,直到找到文本字段。然后,您应该能够设置 clearButtonMode 属性,使用类似 UITextFieldViewModeWhileEditing 的参数作为参数。

这应该使清除按钮仅在编辑文本字段时显示。

您想在 viewDidLoad 或其他早期执行此操作,所以它在您开始使用它之前设置(但在搜索栏初始化之后。

for (UIView *subview in searchBar.subviews)
{
    if ([subview conformsToProtocol:@protocol(UITextInputTraits)])
    {
        [(UITextField *)subview setClearButtonMode:UITextFieldViewModeWhileEditing];
    }
}

关于iphone - 点击取消按钮时,移除 UISearchBar 右侧的清除按钮(灰色 x),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/3052343/

相关文章:

ios - 动态字体大小不起作用?

ios - 使用 Objective-C 捏合、平移和旋转 ImageView ,就像 Instagram 故事一样

objective-c - 在 XPC 服务守护进程中查看可用的字典?

javascript - turn.js 在 iPad 上滑动和捏合

iphone - 通过 cell.contentView 添加 UIView 到 UITableViewCell

ios - 如果在数组中找不到任何内容,为什么此循环会导致崩溃

iphone - 这个 Nsarray 定义有什么问题

ios - 如何正确设置 MKPointAnnotation 坐标变化的动画

ios - 如何在 iPhone 的 UIScrollview 中隐藏/删除滚动条?

iphone - NSAttributedString 在不改变 pointSize 的情况下将样式更改为粗体?