如何在 iOS7 中右对齐 UISearchbar 的文本



你能告诉我如何在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;
}

最新更新