Dav*_*ter 23 iphone objective-c interface-builder ipad
是的,开始我的问题,这里是Spotify应用程序已经解决的问题的一些屏幕:
Spotify的第1步:标准UISearchBar未处于编辑模式.
第1步http://i49.tinypic.com/wbtpwi.png
Spotify的第2步: UISearchBar现在处于编辑模式.已输入搜索字词.取消按钮从右侧滑入,出现清除按钮(灰色x).
第2步http://i45.tinypic.com/161kbvp.png
Spotify的第3步:按下取消按钮; 键盘滑出,搜索栏不再处于编辑模式.搜索项保持不变,灰色x按钮现在隐藏.
第3步http://i46.tinypic.com/20utv9v.png
目前,在下面的代码触发关我按下取消按钮:
- (void)searchBarCancelButtonClicked:(UISearchBar *)searchBar {
[searchBar resignFirstResponder];
[searchBar setShowsCancelButton:NO animated:YES];
}
Run Code Online (Sandbox Code Playgroud)
结果如下:
我的第3步:搜索栏现在不处于编辑模式.取消按钮和键盘已滑出.搜索词仍然存在,但灰色x也是如此.
问题http://i46.tinypic.com/rlm4w5.png
所以,我的问题是:假设-resignFirstResponder(并且-endEditing:,FYI)在搜索栏输入文本时没有隐藏灰色x按钮,那么如何隐藏它?
再次感谢,朋友们.
Jas*_*ien 29
问题是UISearchBar不公开它的文本字段,并管理文本字段本身的属性.有时,属性的值不是您想要的.
例如,在我自己的应用程序中,我希望我的搜索栏的键盘样式使用透明警报样式.
我的解决方案是遍历搜索栏的子视图,直到找到文本字段.然后,您应该能够clearButtonMode使用诸如UITextFieldViewModeWhileEditing参数之类的东西来设置属性.
这应该使得仅在文本字段编辑时显示清除按钮.
您希望在viewDidLoad早期或之前执行此操作,因此在开始使用之前已设置(但在搜索栏初始化之后).
for (UIView *subview in searchBar.subviews)
{
if ([subview conformsToProtocol:@protocol(UITextInputTraits)])
{
[(UITextField *)subview setClearButtonMode:UITextFieldViewModeWhileEditing];
}
}
Run Code Online (Sandbox Code Playgroud)
看起来iOS 7改变了UISearchBar的视图层次结构,文本框在视图中更深(上面的解决方案对我不起作用).但是,修改上述解决方案以遍历整个层次结构的工作原理:
[self configureSearchBarView:[self searchBar]];
- (void)configureSearchBarView:(UIView*)view {
for (UIView *subview in [view subviews]){
[self configureSearchBarView:subview];
}
if ([view conformsToProtocol:@protocol(UITextInputTraits)]) {
[(UITextField *)view setClearButtonMode:UITextFieldViewModeWhileEditing];
}
}
Run Code Online (Sandbox Code Playgroud)
我正在以前的答案为基础,因为我开始在iOS 7.1上看到崩溃,除非我做了以下更改.我respondsToSelector为每个视图添加了一个额外的调用,以确保setClearButtonMode:可以调用它.我观察到一个UISearchBar传入的实例,它似乎符合UITextInputTraits协议但还没有setClearButtonMode:选择器,因此发生了崩溃.UISearchBarTextField也会传入一个实例,它是要调用的实际对象setClearButtonMode:.
- (void)removeClearButtonFromView:(UIView *)view
{
if (!view)
{
return;
}
for (UIView *subview in view.subviews)
{
[self removeClearButtonFromView:subview];
}
if ([view conformsToProtocol:@protocol(UITextInputTraits)])
{
UITextField *textView = (UITextField *)view;
if ([textView respondsToSelector:@selector(setClearButtonMode:)])
{
[textView setClearButtonMode:UITextFieldViewModeNever];
}
}
}
您需要获取搜索栏的 textField
UITextField *textField = [searchBar valueForKey:@"_searchField"];
textField.clearButtonMode = UITextFieldViewModeNever;
Run Code Online (Sandbox Code Playgroud)
在 - (void)searchBarTextDidBeginEditing:(UISearchBar *)searchBar 方法中使用。
- (void)searchBarTextDidBeginEditing:(UISearchBar *)searchBar
{
UITextField *textField = [searchBar valueForKey:@"_searchField"];
textField.clearButtonMode = UITextFieldViewModeNever;
}
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
16966 次 |
| 最近记录: |