如何在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; 
} 
+0

它不起作用。 – jAckOdE

+1

这是因为UISearchBarTextField不是搜索栏的直接子视图。您可以通过递归搜索类来检索它并设置正确的文本对齐方式,但这是不好的做法。如果Apple再次更改类视图层次结构,它可能会中断。无论如何,它只会在文本输入时为文本设置对齐方式。占位符仍然居中,图标仍然左对齐。 – Ash

+0

我在获取子视图之前递归地做了子视图,直到我到达textView。但正如@Ash所说,未来可能会破裂。 –

你可以试试这样也.. searchbar.placeholder = @“Hai .. whitespace”;

+0

首先,这会将文字“海”推向左侧,而不是右侧。其次,由于“空格”字符的宽度不止一个像素,因此您永远无法完全正确地获得它。第三,您必须在用户输入时动态地添加和删除空格,这将导致文本以不美观的方式来回跳动。最后,它只会影响占位符文本。只要用户开始在字段中输入内容,文本就会自行对齐。 – Ash

+0

他要求正确对齐不左对齐和占位符仅用于暗示不是真正的文本。 –

不幸的是,如果不从头开始完全重新实现该类,则不能安全地完成该操作,因为当用户开始并完成编辑时,由对象代码的内部调整文本对齐。

与你想要做的最接近的事情是使用三个位置调整来水平移动文本,但这不会影响对齐,只有绝对位置,甚至只有当用户正在输入时。

如果您想尝试此操作,请查找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;