你能告诉我如何在iOS 7中右对齐UISearchbar文本吗?,我在iOS6中使用它,但现在它在iOS7中不起作用:
//hacking search bar
UITextField *searchField;
for (UIView *subview in self.searchBar.subviews)
{
if ([subview isKindOfClass:[UITextField class]]) {
searchField = (UITextField *)subview;
break;
}
}
if (searchField) {
searchField.textAlignment = NSTextAlignmentRight;
}
不幸的是,如果不从头开始完全重新实现类,就无法安全地完成此操作,因为当用户开始和完成编辑时,文本对齐方式由对象代码的内部调整。
最接近您要做的事情是使用三个位置调整来水平移动文本,但这不会影响对齐,只影响绝对位置,即使这样也只在用户键入时。
如果要尝试此操作,请查找 searchTestPositionAdjust、setPositionAdjust:forSearchBarIcon: 和 searchFieldBackgroundPositionAdjust。不过,我认为这对您没有多大用处。
-灰
为时已晚,但如果有人仍然想知道解决方案,那么您可以遵循这个。
UITextField *searchTextField = [searchBarController.searchBar valueForKey:@"_searchField"];
您可以使用上面的代码获取搜索字段。现在只需使用您要使用的属性,例如。
searchTextField.layer.cornerRadius = 10.0f;
searchTextField.textAlignment = NSTextAlignmentRight;
我有一个解决这个问题的方法。它有点笨拙,不是很整洁,但它确实可以解决问题。
由于UISearchBar
本身不允许您编辑占位符,因此我在它下面设置了一个UITextField
,并通过这样做禁用了它的任何触摸:
-(BOOL)gestureRecognizer:(UIGestureRecognizer *)gestureRecognizer shouldReceiveTouch:(UITouch *)touch
{
if([touch.view isDescendantOfView:self.placeHolderTextField]){
return NO;
}
return YES;
}
注意:不要忘记在 .h 文件中包含<UIGestureRecognizerDelegate>
。但是,如果这不起作用,您可以随时使用[self.view sendSubViewToBack:self.placeholderTextField];
接下来,我刚刚设置了要显示占位符的事件以及何时不显示占位符的事件。在viewDidLoad
,我只是打电话给self.placeHolderTextFiew.placeholder = @"search"
而在
-(void)searchBar:(UISearchBar *)searchBar textDidChange:(NSString *)searchText
{
if(searchText.length > 0){
self.placeHolderTextfield.placeholder = @"";
} else{
self.placeHolderTextfield.placeholder = @"search";
}
}
再次注意:请确保在 .h 文件中包含<UISearchBarDelegate>
以便执行此操作。
我也在使用tableView
,所以当调用方法 DidSelectRowAtIndexPath
时,我还将占位符设置为空字符串。
希望这有帮助。
你也可以这样尝试。搜索栏.占位符 = @"Hai..空格";
设置文本右对齐的方法
搜索栏->属性检查器->搜索文本->自定义偏移->水平(根据需要设置)
在使用UISearchBar的子视图后,我找到了这个解决方案,它适用于iOS 6和iOS 7
//hacking search bar
UITextField *searchField;
for (UIView *subview in self.searchBar.subviews)
{
//this will work in iOS 7
for (id sub in subview.subviews) {
if([NSStringFromClass([sub class]) isEqualToString:@"UISearchBarTextField"])
{
[sub setTextAlignment:NSTextAlignmentRight];
}
}
//this will work for less than iOS 7
if ([subview isKindOfClass:[UITextField class]]) {
searchField = (UITextField *)subview;
break;
}
}
//for less than iOS 7
if (searchField) {
searchField.textAlignment = NSTextAlignmentRight;
}