2013-10-24 3 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의 서브 뷰와 함께 연주 한 후에는 아이폰 OS 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에 도달 할 때까지 subviews를 가져 오기 전에 재귀 적으로 다음 subviews의 subviews를 가져왔다. 그러나 @Ash가 미래에 깨질 것이라고 말했다. –

-2

작동하면 이것도 시도 할 수 있습니다 .. searchbar.placeholder = @ "Hai .. 공백";

+0

우선, 'Hai'텍스트가 오른쪽이 아니라 왼쪽으로 밀려납니다. 두 번째로, 'space'문자의 너비가 두 개 이상의 픽셀이기 때문에 절대 정확하게 얻을 수는 없습니다. 세 번째로, 사용자가 입력 한대로 동적으로 공간을 추가하고 제거해야하므로 텍스트가보기 흉한 방식으로 앞뒤로 흔들 리게됩니다. 마지막으로 자리 표시 자 텍스트에만 영향을 미칩니다. 사용자가 필드에 타이핑을 시작하자 마자 텍스트는 왼쪽으로 정렬됩니다. – Ash

+0

그는 왼쪽 정렬이 아닌 오른쪽 정렬을 요청하고 자리 표시자는 실제 텍스트가 아니라 힌트를위한 것입니다. –

0

불행히도 처음부터 클래스를 완전히 다시 구현하지 않으면 안전하게 완료 할 수 없습니다. 텍스트 정렬은 사용자가 편집을 마치면 객체 코드의 내부에 따라 조정되기 때문입니다.

당신이하고 싶은 것에 가장 가까운 것은 3 가지 위치 조정을 사용하여 텍스트를 수평으로 이동시키는 것입니다.하지만 이것은 정렬, 절대 위치 및 사용자가 입력하는 경우에만 영향을 미치지 않습니다.

검색하려는 경우 searchTestPositionAdjustment, setPositionAdjustment : forSearchBarIcon : 및 searchFieldBackgroundPositionAdjustment를 찾으십시오. 나는 그것이 당신에게 많은 용도가 될 것이라고 생각하지 않습니다. 바로

이 searchbar-> inspector-> 검색 텍스트 -> 사용자 지정 오프셋,> (요구 사항에 따라 설정) 수평

-2

방법 이 문제에 대한 해결책. 그것은 약간 해키하고 그리 깔끔하지는 않지만 트릭을합니다. 자체가 당신이 자리를 편집 할 수 없습니다 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];

다음에는 자리 표시자를 표시하고 싶지 않은 이벤트를 설정했습니다. 이 작업을 수행하려면 순서에 따라 .H 파일에 <UISearchBarDelegate>을 포함해야합니다 다음 viewDidLoad에서 , 난 그냥 다시

그리고

-(void)searchBar:(UISearchBar *)searchBar textDidChange:(NSString *)searchText 
{ 
    if(searchText.length > 0){ 
     self.placeHolderTextfield.placeholder = @""; 
    } else{ 
     self.placeHolderTextfield.placeholder = @"search"; 
    } 
} 

주에서 self.placeHolderTextFiew.placeholder = @"search"를 호출하고 있습니다.

tableView도 사용하고 있으므로 DidSelectRowAtIndexPath 메서드를 호출 할 때 자리 표시자를 빈 문자열로 설정하고 있습니다.

희망이 도움이됩니다.

0

내가있어 속성 정렬 텍스트를 설정하는

-Ash

1

너무 늦었지만 누군가가 여전히 솔루션을 궁금해하는 경우이를 따라갈 수 있습니다.

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

위의 코드를 사용하여 검색 필드를 얻을 수 있습니다.이제 사용하려는 속성을 사용하십시오.

searchTextField.layer.cornerRadius = 10.0f; 
searchTextField.textAlignment = NSTextAlignmentRight; 
관련 문제