2009-11-19 3 views
9

, 나는 내가 문서 확인 한아이폰 UISearchBar 및 keyboardAppearance

keyboardAppearance = UIKeyboardAppearanceAlert 

를 설정하고 싶은 경우에만 keyboardType을 변경할 수 있습니다 것 같습니다.

Apple의 비공개 API를 위반하지 않고이 작업을 수행 할 수 있습니까?

답변

-2

keyboardAppearance는 UITextInputTraitsProtocol의 속성으로 TextField 개체를 통해 속성이 설정되었음을 의미합니다. 알리미 키보드가 무엇인지 알지 못합니다. SDK에서 알리미에 적합한 키보드입니다.

UITextField *myTextField = [[UITextField alloc] init]; 
myTextField.keyboardAppearance = UIKeyboardAppearanceAlert; 

지금 사용자가 텍스트 필드를 탭 키보드가 표시 될 때, 그것은 당신이 원하는 것을해야한다 : 여기

당신이 속성에 액세스하는 방법입니다.

+1

UITextField가 아니라 UISearchBar에서 발생한다는 사실을 놓쳤습니다. UIKeyboardAppearanceAlert에는 배경이 투명하기 때문에 모든 앱에서 동일하게 유지하려고합니다. 이것은 UITextFields에서 시연 한 것처럼 성취 될 수 있지만 UISearchBar에는 텍스트 필드가 있습니다. 이 텍스트 필드의 키보드 모양을 설정할 수 있는지 알고 싶었습니다. –

+0

실례합니다. 문서에서는 UISearchBar 클래스에서 키보드 투명도를 설정하는 속성이나 메서드가없는 것처럼 보입니다. 키보드 유형 만 설정할 수 있습니다. – Justin

27

이 그것을 수행해야합니다

이 일을 다른 방법을 찾을 수 없습니다

for(UIView *subView in searchBar.subviews) 
    if([subView isKindOfClass: [UITextField class]]) 
     [(UITextField *)subView setKeyboardAppearance: UIKeyboardAppearanceAlert]; 
...

UISearchBar보기 계층 구조가 변경 되었기 때문에이 더 이상 아이폰 OS 7에서 작동
+0

나는 그것을 확인한다 : 나는 그것을 얻는 다른 방법을 찾지 못했다. 이 대답을 받아 들여야합니다. – CedX

+0

이 방법이 효과가있는 것 같지만 여기서는 다른 간단한 해결책을 찾았습니다. http://stackoverflow.com/questions/1594346/dynamically-changing-keyboard-type-for-a-uisearchbar – ecotax

+0

@ecotax : 연결 중입니다. keyboardType (기본값, ASCII, Numbers ...)에 대한 해결책으로, 그러나 이것은 keyboardAppearance (밝음, 어두움)에 관한 것입니다. – auco

9

. UITextView는 이제 첫 번째 하위 뷰의 하위 뷰입니다 (예 : searchBar.subviews[0].subviews 배열에 있음).

미래의 증명 방법은 전체 뷰 계층 구조를 재귀 적으로 검사하고 UITextField이 아닌 UITextInputTraits 프로토콜을 확인하는 것입니다. 실제로이 방법이 선언 되었기 때문입니다. 이렇게하는 깔끔한 방법은 카테고리를 사용하는 것입니다.

- (void) setKeyboardAppearence: (UIKeyboardAppearance) appearence { 
    [(id<UITextInputTraits>) [self firstSubviewConformingToProtocol: @protocol(UITextInputTraits)] setKeyboardAppearance: appearence]; 
} 

그런 다음에 UIView에 카테고리를 추가하려면이 방법을 추가합니다 :

- (UIView *) firstSubviewConformingToProtocol: (Protocol *) pro { 
    for (UIView *sub in self.subviews) 
     if ([sub conformsToProtocol: pro]) 
      return sub; 

    for (UIView *sub in self.subviews) { 
     UIView *ret = [sub firstSubviewConformingToProtocol: pro]; 
     if (ret) 
      return ret; 
    } 

    return nil; 
} 

이제 같은에서 검색 창에 키보드 모양을 설정할 수 있습니다 먼저이 방법을 추가 UISearchBar에 대한 범주를 만들 당신이 텍스트 필드를 것 방법 :

[searchBar setKeyboardAppearence: UIKeyboardAppearanceDark]; 
+0

감사합니다. 매우 유용합니다! 제 생각에는 작은 오타가 있다고 생각합니다 : "[sub subConfigurationToProtocol : pro]"[sub firstSubviewConformingToProtocol : pro] " – auco

+0

@auco 감사합니다. – stonemonk

35

내가 앱을 통해 그것을 수행하려는 경우,이 작업을 수행하는 것으로 가장 좋은 방법,의 UITextField에 모양을 사용하는 것입니다. 실행시 AppDelegate에 이것을 넣으십시오.

[[UITextField appearance] setKeyboardAppearance:UIKeyboardAppearanceDark]; 
+0

나에게 속임수를 썼다, 고마워! – Funkycochise

+0

훨씬 더 나은 방법! 감사합니다 – iGranDav

+0

그게 전부 나를 위해 않았다. iOS7에서. 아래의 범주 아이디어는 좋아 보이지만. –