Chu*_*eow 28 iphone cocoa-touch objective-c uisearchbar ios
我有一个UISearchBar,它有一个取消按钮(显示使用-(void)setShowsCancelButton:animated).tintColor为了获得一个灰色的搜索栏,我已经改变了这样的搜索栏:
UISearchBar *searchBar = [[UISearchBar alloc] initWithFrame:CGRectMake(0, 0, 320, 40)];
searchBar.tintColor = [UIColor colorWithWhite:0.8 alpha:1.0];
Run Code Online (Sandbox Code Playgroud)
这就是它现在的样子 - 注意取消按钮也是灰色的:http://twitpic.com/c0hte
有没有办法分别设置取消按钮的颜色,所以它看起来更像这样:http://twitpic.com/c0i6q
lem*_*nar 27
您可以使用UIAppearance样式不反复的子视图的取消按钮UISearchBar,但在UIButton头目前没有与任何注释的方法UI_APPEARANCE_SELECTOR.
编辑:深入查看子视图,直到获得取消按钮
但这通常会searchBar.setShowsCancelButton(true, animated: true)在调用之前返回nil
.
extension UISearchBar {
var cancelButton : UIButton? {
if let view = self.subviews.first {
for subView in view.subviews {
if let cancelButton = subView as? UIButton {
return cancelButton
}
}
}
return nil
}
}
Run Code Online (Sandbox Code Playgroud)
Ner*_*u-J 20
更改"取消"按钮的标题:
[[UIButton appearanceWhenContainedIn:[UISearchBar class], nil] setTitle:@"newTitle" forState:UIControlStateNormal];
Run Code Online (Sandbox Code Playgroud)
Swift等价物:
let cancelButton = UIButton.appearance(whenContainedInInstancesOf: [UISearchBar.self])
cancelButton?.setTitle("cancel".localized, for: .normal)
Run Code Online (Sandbox Code Playgroud)
小智 20
在iOS 5.0+中,您可以使用appearnce代理.
在显示搜索栏之前:
UIBarButtonItem *searchBarButton = [UIBarButtonItem appearanceWhenContainedIn:[UISearchBar class], nil];
[searchBarButton setBackgroundImage:myCancelButtonImageNormal forState:UIControlStateNormal barMetrics:UIBarMetricsDefault];
[searchBarButton setBackgroundImage:myCancelButtonImageHighlighted forState:UIControlStateHighlighted barMetrics:UIBarMetricsDefault];
[searchBarButton setTitleTextAttributes:barButtonTitleTextAttributesNormal forState:UIControlStateNormal];
[searchBarButton setTitleTextAttributes:barButtonTitleTextAttributesHighlighted forState:UIControlStateHighlighted];
Run Code Online (Sandbox Code Playgroud)
如果使用[UIButton appearanceWhenContainedIn:[UISearchBar class], nil],则会影响其他按钮(例如清除按钮).所以,你最好不要使用它UIButton的出现.试试UIBarButtonItem.
Sar*_*ara 17
虽然这可能与原始问题不完全相关,但解决方案仍然适用于尝试自定义UISearchBar中的"取消"按钮.认为这将有助于其他陷入困境的人.
我的情况是更改取消按钮的标题,但有一个转折,其中我不想显示取消按钮默认但只是希望它显示,当用户进入搜索模式(通过在搜索文本字段内单击).在这一刻,我希望取消按钮带有标题"完成"("取消"给我的屏幕赋予不同的含义,因此定制).
然而,这就是我所做的(caelavel和Arenim解决方案的组合):
使用以下两种方法将UISearchBar子类化为MyUISearchBar:
-(void) setCloseButtonTitle: (NSString *) title forState: (UIControlState)state
{
[self setTitle: title forState: state forView:self];
}
-(void) setTitle: (NSString *) title forState: (UIControlState)state forView: (UIView *)view
{
UIButton *cancelButton = nil;
for(UIView *subView in view.subviews){
if([subView isKindOfClass:UIButton.class])
{
cancelButton = (UIButton*)subView;
}
else
{
[self setTitle:title forState:state forView:subView];
}
}
if (cancelButton)
[cancelButton setTitle:title forState:state];
}
Run Code Online (Sandbox Code Playgroud)
在使用此搜索栏的viewcontroller中,以下代码负责显示取消按钮并自定义其标题:
- (void)searchBarTextDidBeginEditing:(UISearchBar *)searchBar
{
MyUISearchBar *sBar = (MyUISearchBar *)searchBar;
[sBar setShowsCancelButton:YES];
[sBar setCloseButtonTitle:@"Done" forState:UIControlStateNormal];
}
Run Code Online (Sandbox Code Playgroud)
奇怪的是,我没有做任何事情来隐藏取消按钮,因为它在退出搜索模式时默认隐藏.
Ama*_*mer 13
你想做的事情非常艰难.获取取消按钮没有内置钩子.
但是,如果你愿意打开引擎盖,有几种选择.
首先,UISearchBar是一个UIView,而Cancel按钮也是一个视图,它作为子视图添加到搜索栏中,就像您期望的那样.
我做了一点实验,可以告诉你,当按钮在屏幕上时,它的大小为48,30.
所以在viewWillAppear中,你可以这样做:
通过查找大小为48,30的查找,在[searchBar子视图]中找到取消按钮视图.(似乎只有一个 - 这可能会改变......)你可能会倍加小心,寻找一个大致正确位置的人(在风景和肖像方面有所不同).
将子视图添加到取消按钮.
子视图应该是一个UIControl(这样你就可以设置enabled = NO,以确保触摸事件到达实际的取消按钮)
它需要有正确的颜色和圆角; 因为我还不明白的原因你需要捏造大小(55,30似乎有效)
如果searchBar.showsCancelButton始终为YES,这将起作用; 如果您希望它在不编辑搜索字符串时消失,则每次出现取消按钮时都需要找到一个钩子来添加叠加层.
如你所见,这是一些丑陋的修修补补.睁大眼睛这样做.
您可以通过循环搜索栏的子视图并检查类类型(而不是大小)来找到取消按钮:
UIButton *cancelButton = nil;
for(UIView *subView in yourSearchBar.subviews){
if([subView isKindOfClass:UIButton.class]){
cancelButton = (UIButton*)subView;
}
}
Run Code Online (Sandbox Code Playgroud)
然后改变色调颜色:
[cancelButton setTintColor:[UIColor colorWithRed:145.0/255.0 green:159.0/255.0 blue:179.0/255.0 alpha:1.0]];
Run Code Online (Sandbox Code Playgroud)
小智 7
如果要配置取消按钮,UISearchBar则应UIButton从UISearchBar对象中获取对象.以下示例
UISearchBar *s_bar = [[UISearchBar alloc] initWithFrame:CGRectMake(50,20,300,30)];
s_bar.delegate = self;
s_bar.barStyle = UIBarStyleDefault;
s_bar.showsCancelButton = YES;
UIButton *cancelButton;
for (id button in s_bar.subviews)
{
if ([button isKindOfClass:[UIButton class]])
{
cancelButton=(UIButton*)button;
break;
}
}
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
43880 次 |
| 最近记录: |