修改UISearchBar右边取消按钮

关于修改UISearchBar右边取消按钮

这个修改的时候注意:一点字数一定要一致。

利用kvc修改对应的cancelButton

1> 首先创建一个自定的按钮

UIButton *cancelButton = [UIButton buttonWithType:UIButtonTypeCustom]
[cancelButton setTitle:@"取消 " forState:UIControlStateNormal];
[cancelButton setTitleColor:[UIColor colorWithRed:23/255.0  green:116/255.0  blue:222/255.0 alpha:1] forState:UIControlStateNormal];
[cancelButton addTarget:self action:@selector(cancel) forControlEvents:UIControlEventTouchUpInside];

2> 利用kvc,修改对应的keyPath

 [searchBar setValue:cancelButton forKeyPath:@"_cancelButton"];
或者
[searchBar setValue:cancelButton forKeyPath:@"cancelButton"];

3> 对添加的target自定义操作,执行搜索任务,调取UISearchBarDelegate的方法

自定义的target方法
- (void)cancel```
    
     注意: 对于点击键盘右下角的确定或者search按钮执行搜索,文本框本身输入的是“\n”,在
    - (BOOL)searchBar:(UISearchBar *)searchBar shouldChangeTextInRange: (NSRange)range replacementText:(NSString *)text**判断text输入的是"\n"返回NO执行相应的搜索任务。
     其实在这个方法里面也可以截取前面的多少个字符串,比如限制输入的字数是500个,直接去文本框的前500个字符串
    
- (BOOL)searchBar:(UISearchBar *)searchBar shouldChangeTextInRange: (NSRange)range replacementText:(NSString *)text{
if ([text isEqualToString:@"\n"]) {
    NSLog(@"%@",searchBar.text);
    return NO;
}
return YES;
}

还有一种是遍历searchBar的subViews修改对应的view的值,没有亲自测试过(可能会碰到层级结构的问题)

####修改searchBar的背景颜色
  其实修改的是searchBar的backgroundImage
利用UIColor生成对应的图片颜色背景

/*!
@brief 利用UIcolor生成一张纯图片
@param color 颜色
@return UIImage 一张图片
*/

  • (UIImage )createImageWithColor:(UIColor) color
    {
    CGRect rect=CGRectMake(0.0f, 0.0f, 1.0f, 1.0f);
    UIGraphicsBeginImageContext(rect.size);
    CGContextRef context = UIGraphicsGetCurrentContext();
    CGContextSetFillColorWithColor(context, [color CGColor]);
    CGContextFillRect(context, rect);
    UIImage *theImage = UIGraphicsGetImageFromCurrentImageContext();
    UIGraphicsEndImageContext();
    return theImage;
    }
####点击键盘右下角完成搜索功能
其实输入的是一个"\n"也就是一个空的字符串,在UISearchBarDelegate方法
  • (BOOL)searchBar:(UISearchBar *)searchBar shouldChangeTextInRange:(NSRange)range replacementText:(NSString *)text {
    if ([text isEqualToString:@"\n"]) {
    //在这里执行对应的操作,也可以截取对应的字符串(比如字数的限制等)
    return false;
    }
    }
其实UIsearchBar本身自带的点击搜索代理方法(如下),上面的方法可以作为UItextField或者UITextView来使用。
  • (void)searchBarSearchButtonClicked:(UISearchBar *)searchBar
有时候我们需要在取消对应的第一响应者的时候去执行对应的方法,这个时候其实你的按钮的enable属性是NO,你需要设置为YES才可以。

UIButton *cancelButton = [self.searchBar valueForKey:@"cancelButton"];
cancelButton.enabled = YES;

你可能感兴趣的:(修改UISearchBar右边取消按钮)