2013-10-24 26 views
3

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

回答

-3

用的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所說,未來可能會破裂。 –

-2

你可以試試這樣也.. searchbar.placeholder = @「Hai .. whitespace」;

+0

首先,這會將文字「海」推向左側,而不是右側。其次,由於「空格」字符的寬度不止一個像素,因此您永遠無法完全正確地獲得它。第三,您必須在用戶輸入時動態地添加和刪除空格,這將導致文本以不美觀的方式來回跳動。最後,它只會影響佔位符文本。只要用戶開始在字段中輸入內容,文本就會自行對齊。 – Ash

+0

他要求正確對齊不左對齊和佔位符僅用於暗示不是真正的文本。 –

0

不幸的是,如果不從頭開始完全重新實現該類,則不能安全地完成該操作,因爲當用戶開始並完成編輯時,由對象代碼的內部調整文本對齊。

與你想要做的最接近的事情是使用三個位置調整來水平移動文本,但這不會影響對齊,只有絕對位置,甚至只有當用戶正在輸入時。

如果您想嘗試此操作,請查找searchTestPositionAdjustment,setPositionAdjustment:forSearchBarIcon:和searchFieldBackgroundPositionAdjustment。儘管如此,我認爲它不會對你有太大用處。

-Ash

-2

的方式來設置文本右對齊

searchbar->屬性督察>搜索文本 - >自定義的經偏置>水平(設置爲按要求)

0

我有解決這個問題。這有點哈克,不是很整潔,但它的確有竅門。

由於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時,我還將佔位符設置爲空字符串。

希望這會有所幫助。

1

這太晚了,但如果有人仍然想知道解決方案,那麼你可以按照這個。

UITextField *searchTextField = [searchBarController.searchBar valueForKey:@"_searchField"]; 

您可以使用上述代碼獲取搜索字段。現在簡單地使用你想使用的屬性,比如。

searchTextField.layer.cornerRadius = 10.0f; 
searchTextField.textAlignment = NSTextAlignmentRight;