关于修改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;