【问题标题】:How to change clear button image (x button) or atleast the color of the clear button image in UISearchbar?如何更改清除按钮图像(x 按钮)或至少更改搜索栏中清除按钮图像的颜色?
【发布时间】:2012-10-30 16:26:39
【问题描述】:

我需要一个带有取消按钮的完全透明的搜索栏。我尝试了很多解决方案,但我还没有找到更好的解决方案。当我尝试删除背景颜色时,它会显示范围栏。谁能给我一些带有can按钮的完全透明搜索栏的源代码。 这里是

addSearchbar.backgroundColor = [UIColor colorWithRed:1.0 green:1.0 blue:1.0 alpha:0.5];
UITextField *sbTextField = (UITextField *)[self.addSearchbar.subviews lastObject];

for (UIView *subview in addSearchbar.subviews)
{
    NSLog(@"%@",subview);
    if ([subview isKindOfClass:[UITextField class]])
    {
        sbTextField = (UITextField *)subview;
        UIImage *image = [UIImage imageNamed: @"06_magnifying_glass.png"];
        UIImageView *iView = [[UIImageView alloc] initWithImage:image];
        iView.frame = CGRectMake(0, 0, 24, 24);
        sbTextField.leftView.frame = CGRectMake(0, 0, 24, 24);
        sbTextField.leftView = iView;
        [sbTextField.rightView removeFromSuperview];
        CGFloat myWidth = 24.0f;
        CGFloat myHeight = 24.0f;
        UIButton *myButton = [[UIButton alloc] initWithFrame:CGRectMake(0.0f, 0.0f, myWidth, myHeight)];
        [myButton setImage:[UIImage imageNamed:@"clear.png"] forState:UIControlStateNormal];
        [myButton setImage:[UIImage imageNamed:@"clear.png"] forState:UIControlStateHighlighted];

        [myButton addTarget:self action:@selector(doClear:) forControlEvents:UIControlEventTouchUpInside];
        sbTextField.rightView = myButton;
        sbTextField.rightViewMode = UITextFieldViewModeWhileEditing;
        break;
    }
    if([subview isMemberOfClass:[UISegmentedControl class]])
    {
        UISegmentedControl *scopeBar=(UISegmentedControl *) subview;
        scopeBar.tintColor =  [UIColor clearColor];
    }
}
[sbTextField removeFromSuperview];
[addSearchbar addSubview:sbTextField];
[addSearchbar setSearchFieldBackgroundImage:[UIImage imageNamed:@"SearchBar.png"] forState:UIControlStateNormal];
CGRect sbFrame = self.addSearchbar.frame;
// Set the default height of a textfield
sbFrame.size.height = 31;

/* 8 is the top padding for textfield inside searchbar
 * You may need to add a variable to 8 according to your requirement.
 */
sbFrame.origin.y = 6+self.addSearchbar.frame.origin.y;
sbTextField.frame = sbFrame;
sbTextField.textColor = [UIColor lightGrayColor];
[sbTextField setAutoresizingMask:UIViewAutoresizingFlexibleWidth | UIViewAutoresizingFlexibleBottomMargin];

需要一个完全透明的搜索栏,带有取消按钮和清除按钮,但没有范围栏。

提前致谢

【问题讨论】:

标签: ios uibutton uisearchbar


【解决方案1】:

从 iOS 5.0 开始,您可以执行以下操作:

UIImage *imgClear = [UIImage imageNamed:@"clear"];
[addSearchBar setImage:imgClear forSearchBarIcon:UISearchBarIconClear state:UIControlStateNormal];

就是这样。您可能还想为UIControlStateHighlighted 状态重复该行。

您应该做的最后一件事是在搜索栏的子视图中进行挖掘。总有一天会断的。使用适当的 API 自定义任何控件。

【讨论】:

  • 不幸的是,您的答案的后半部分不起作用。 see here.
  • 在 iOS 7.1 中,此解决方案 stackoverflow.com/questions/13862050/… 完美运行。
  • 您必须为突出显示和正常状态使用不同的图像。我的意思是,图像可以是相同的,但不是相同的 UIImage* 参考。
【解决方案2】:

请先设置 UIControlHighlighted 状态图像,然后再设置 UIControlStateNormal 状态图像,否则您可能会遇到 clearIcon 未设置为突出显示状态的问题。 (不知道为什么会出现这个问题。)

[_searchBar setImage:[UIImage imageNamed:@"ClearIcon"] forSearchBarIcon:UISearchBarIconClear state:UIControlStateHighlighted];
[_searchBar setImage:[UIImage imageNamed:@"ClearIcon"] forSearchBarIcon:UISearchBarIconClear state:UIControlStateNormal];

【讨论】:

    【解决方案3】:

    对于那些在 Swift 中尝试这个的人(我知道有人会来这里寻找这个......)你去:

        self.searchBar.setImage(UIImage(named: "ico-cancel"), forSearchBarIcon: UISearchBarIcon.Clear, state: UIControlState.Normal)
        self.searchBar.setImage(UIImage(named: "ico-cancel"), forSearchBarIcon: UISearchBarIcon.Clear, state: UIControlState.Highlighted)
    

    确保您的 Assets.xcassets 文件夹中有正确的图像。

    【讨论】:

      【解决方案4】:

      以下是如何更改 UISearchBar 的 UITextField 中的放大镜和清除按钮图标 没有新图标

      // Reference search display controller search bar's text field (in my case). 
      UITextField *searchBarTextField = [self.searchDisplayController.searchBar valueForKey:@"_searchField"]; 
      
      // Magnifying glass icon. 
      UIImageView *leftImageView = (UIImageView *)searchBarTextField.leftView; 
      leftImageView.image = [LeftImageView.image imageWithRenderingMode:UIImageRenderingModeAlwaysTemplate]; 
      leftImageView.tintColor = [UIColor whiteColor]; 
      
         // Clear button 
      UIButton *clearButton = [searchBarTextField valueForKey:@"_clearButton"]; 
      [clearButton setImage:[clearButton.imageView.image imageWithRenderingMode:UIImageRenderingModeAlwaysTemplate] forState:UIControlStateNormal];
      clearButton.tintColor = [UIColor whiteColor];
      

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 2018-04-12
        • 1970-01-01
        • 2015-03-12
        • 2019-09-19
        • 2021-05-28
        • 2016-01-30
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多