如何在iOS7中将UISearchbar文本右对齐
您能告诉我如何在iOS 7中对齐UISearchbar文本? ,我是用这个在iOS6的,但现在它不能在iOS7工作:如何在iOS7中将UISearchbar文本右对齐
//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;
}
用的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;
}
你可以试试这样也.. searchbar.placeholder = @“Hai .. whitespace”;
首先,这会将文字“海”推向左侧,而不是右侧。其次,由于“空格”字符的宽度不止一个像素,因此您永远无法完全正确地获得它。第三,您必须在用户输入时动态地添加和删除空格,这将导致文本以不美观的方式来回跳动。最后,它只会影响占位符文本。只要用户开始在字段中输入内容,文本就会自行对齐。 – Ash
他要求正确对齐不左对齐和占位符仅用于暗示不是真正的文本。 –
不幸的是,如果不从头开始完全重新实现该类,则不能安全地完成该操作,因为当用户开始并完成编辑时,由对象代码的内部调整文本对齐。
与你想要做的最接近的事情是使用三个位置调整来水平移动文本,但这不会影响对齐,只有绝对位置,甚至只有当用户正在输入时。
如果您想尝试此操作,请查找searchTestPositionAdjustment,setPositionAdjustment:forSearchBarIcon:和searchFieldBackgroundPositionAdjustment。尽管如此,我认为它不会对你有太大用处。
-Ash
的方式来设置文本右对齐
searchbar->属性督察>搜索文本 - >自定义的经偏置>水平(设置为按要求)
我有解决这个问题。这有点哈克,不是很整洁,但它的确有窍门。
由于UISearchBar
本身不会允许你编辑占位符,我从任何触摸通过这样设置UITextField
它下面和残疾人它:
-(BOOL)gestureRecognizer:(UIGestureRecognizer *)gestureRecognizer shouldReceiveTouch:(UITouch *)touch
{
if([touch.view isDescendantOfView:self.placeHolderTextField]){
return NO;
}
return YES;
}
注意:不要忘了包括<UIGestureRecognizerDelegate>
在你的.h文件中。 但是,如果这不起作用,你可以随时使用[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";
}
}
再次注:确保包括<UISearchBarDelegate>
在.h文件中,为了这个工作。
我也在使用tableView
,所以当调用方法DidSelectRowAtIndexPath
时,我还将占位符设置为空字符串。
希望这会有所帮助。
这太晚了,但如果有人仍然想知道解决方案,那么你可以按照这个。
UITextField *searchTextField = [searchBarController.searchBar valueForKey:@"_searchField"];
您可以使用上述代码获取搜索字段。现在简单地使用你想使用的属性,比如。
searchTextField.layer.cornerRadius = 10.0f;
searchTextField.textAlignment = NSTextAlignmentRight;
它不起作用。 – jAckOdE
这是因为UISearchBarTextField不是搜索栏的直接子视图。您可以通过递归搜索类来检索它并设置正确的文本对齐方式,但这是不好的做法。如果Apple再次更改类视图层次结构,它可能会中断。无论如何,它只会在文本输入时为文本设置对齐方式。占位符仍然居中,图标仍然左对齐。 – Ash
我在获取子视图之前递归地做了子视图,直到我到达textView。但正如@Ash所说,未来可能会破裂。 –