2010-07-03 5 views
1

UIView의 하위보기로 추가 된 UIScrollView가있는 응용 프로그램이 있습니다. 이 스크롤보기에는 키보드 유형이 numberPad로 설정된 텍스트 필드가 있습니다. 이제 문제는 스크롤보기의 다른 곳을 탭할 때 키보드를 닫으려는 것입니다. 내가 어떻게 할 수 있니?NumPad 키보드를 UIScrollView에서 닫습니다.

답변

1

터치 핸들러에서 textField의 resignFirstResponder를 호출하기 만하면됩니다.

 
(void)touchesEnded:(NSSet *)touches withEvent:(UIEvent *)event { 
    [myTextField resignFirstResponder]; 
} 
+0

고맙습니다 .. 난에 노력 해왔다 오랫동안이 같은 일을해라. 그러면 그것은 내 마음을 다 치지 않았다. 그것은 그렇게 간단하다. –

0

내가 UIScrollView의 서브 클래스에 제스처를 추가 할 때, 나는 그런보기를, 하위 뷰를 클릭 스크롤 할 수있는 등 서로 간섭 내보기 트리의 다양한 제스처, 문제가,되었다가 키보드는 모든 경우에 해제됩니다. 이 솔루션은 UIScrollView 또는 UIViewController의 수퍼 클래스에서 설정할 수 있습니다.

DismissKeyboardTapGesture 클래스는 ARC를 사용하고보기 아래의 텍스트 입력란에서 작동하며 버튼과 같은 하위보기에서 클릭을 인계하지 않습니다. 또한 iOS7 스크롤 효과를 이용하여 키보드를 닫습니다.

_dismissKeyboard = [[DismissKeyboardTapGesture alloc] initWithView:self]; 

또는의 UIViewController에서 : UISScrollView의 슈퍼 클래스에서 설정

여기

_dismissKeyboard = [[DismissKeyboardTapGesture alloc] initWithView:self.view]; 

클래스입니다 : 솔루션에 대한

@interface DismissKeyboardTapGesture : NSObject <UIGestureRecognizerDelegate> 

@end 

@implementation DismissKeyboardTapGesture 

- (id)initWithView:(UIView *)view 
{ 
    self = [super init]; 
    if (self) { 
     UITapGestureRecognizer *singleTap = [[UITapGestureRecognizer alloc] initWithTarget:self action:@selector(singleTap:)]; 
     singleTap.cancelsTouchesInView = NO; 
     singleTap.delegate = self; 
     [view addGestureRecognizer:singleTap]; 

     if ([view respondsToSelector:@selector(setKeyboardDismissMode:)]) { 
      // Bonus effect to dismiss keyboard by scrolling 
      ((UIScrollView *)view).keyboardDismissMode = UIScrollViewKeyboardDismissModeInteractive; 
     } 
    } 
    return self; 
} 

- (BOOL)gestureRecognizer:(UIGestureRecognizer *)gestureRecognizer shouldRecognizeSimultaneouslyWithGestureRecognizer:(UIGestureRecognizer *)otherGestureRecognizer 
{ 
    // Don't stop any existing gestures in our view from working 
    if (otherGestureRecognizer.view == gestureRecognizer.view) { 
     return YES; 
    } 
    return NO; 
} 

- (void)singleTap:(UIGestureRecognizer*)gestureRecognizer 
{ 
    // Close keyboard for any text edit views that are children of the main view 
    [gestureRecognizer.view endEditing:YES]; 
} 

@end 
관련 문제