2013-02-02 3 views
0

표시 할 때 내 키보드의 꼭대기에 앉는 사용자 정의 UIToolbar을 가지고 있으며 미리 포맷 된 텍스트를 삽입하는 데 사용합니다. 내 문제는 하나의 UITextView과 두 개의 UITextField이 내 사전 형식 텍스트의 잠재적 인 사용자라는 것입니다.키보드가 보이면 iOS 캐럿은 어디에 있습니까?

단추가 IBAction을 호출하면 어떤 요소에 포커스가 있는지 알 수 있으며 firstResponder입니까? 똑똑하게 내 질문에

시도 # 2 :

나는 UITextField 포커스가 UITextView[textElement selectedRange];를 호출해야합니다. textElement을보기의 어느 쪽이 상관이없는 방식으로 선언 할 수 있습니까? UIText* 클래스입니까?

나는 다음과 같은 경우 ...

UIView *textElement = [self my_method_of_getting_first_responder]; 
NSRange range = [textElement selectedRange]; 

I 물론 얻을 수있는 UIView 'selectedRange'

감사 선택기를 선언하지 않는

대신!

답변

1

질문을 이해하면 버튼을 클릭하고 현재 활성 텍스트 필드에 대한 링크를 가져 오시겠습니까? 그럼 당신은 UIView의에 범주와 가야 : 당신이 컨트롤러를 볼에서

@implementation UIView (FindFirstResponder) 
- (BOOL)findFirstResponder 
{ 
    if (self.isFirstResponder) { 
     return YES;  
    } 
    for (UIView *subView in self.subviews) { 
     if ([subView findFirstResponder]) { 
      return YES; 
     } 
    } 
    return NO; 
} 
@end 

당신은 UIWindow에이 범주의 메서드를 호출 할 수 있습니다. 창 사용을 ​​얻으려면 UIWindow *window= self.view.window;

+0

나는 그 해결책이 이전에 SO에 게시 된 것을 보았습니다. 나는 이것이 firstResponder 인 객체에 대한 포인터를 어떻게 제공하는지 약간 혼란 스럽다. –

+0

포인터를 얻고 싶다면'YES','YES','NO' 대신'self'와'subview'와'nil'을 돌려 줄 수 있습니다. 물론 전체 메소드의 타입을 'UIView'로 변경해야합니다. – asdf

+0

이 문제는 포커스가있는 UIView (또는 하위 클래스)를 반드시 알 필요는 없지만 더 많은 기능을 수행합니다. 가능한 반환 값 인'UITextField' 또는'UITextView'가 있고'selectedRange'와 같은 것을 호출하고 싶다면, 어떻게 적절한 타입을 선언 할 수 있습니까? –

관련 문제