2012-10-30 61 views
9

我需要一个带有取消按钮的完全透明的搜索栏。我已经尝试了很多解决方案但我还找不到更好的解决方案。当我尝试删除背景颜色时,它显示范围栏。可以任何一个给我一些源代码完全transperant搜索栏与罐头按钮。 这里的如何在UISearchbar中更改清除按钮图像(x按钮)或至少清除按钮图像的颜色?

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]; 

需要一个完全透明的搜索栏与取消按钮和清除按钮,但没有scopebar。提前

+0

http://stackoverflow.com/questions/9704562/remove-or-覆盖在uisearchdisplaycontroller-in-a-uipopove –

+0

我发现了解决方案,但另一个pblm,所以我更新了我的问题 – Arvind

回答

24

由于作为的iOS 5.0,你可以做到以下几点:

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

完蛋了。您可能还想重复UIControlStateHighlighted状态的行。

你应该做的最后一件事是在搜索栏的子视图内部挖掘。它保证有一天会打破。使用适当的API来定制任何控件。

+2

不幸的是,你的答案的后半部分不起作用。 [见这里](http://stackoverflow.com/questions/14720026/customizing-uisearchbariconclear-for-uicontrolstatehighlighted-does-notwork)。 – Dima

+0

在iOS 7.1这个解决方案http://stackoverflow.com/questions/13862050/custom-clear-button-in-uisearchbar-text-field#answer-19438100完美。 – Alex

+0

您必须为高亮和正常状态使用不同的图像。我的意思是,图像可以是相同的,但不是相同的UIImage *参考。 – ingaham

4

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

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

对于那些你在斯威夫特尝试这种(我知道有人会来这里寻找这个...)在这里你去:

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文件夹中有正确的图像。

0

这里是你如何改变放大镜和清除按钮图标在一个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];