3

UIScrollViewのサブビューとして追加されたアプリケーションがありますUIView。のサブビューとしてを追加UITextFieldしました。スクロール ビューでタップしたときにキーボードを閉じたいです。これどうやってするの?UITextviewUIScrollView

4

4 に答える 4

10

追加するだけUITapGestureRecognizer

- (void)viewDidLoad
{
    [super viewDidLoad];
    UITapGestureRecognizer *singleTap = [[UITapGestureRecognizer alloc] initWithTarget:self action:@selector(singleTapGestureCaptured:)];
    [scr addGestureRecognizer:singleTap];
}


- (void)singleTapGestureCaptured:(UITapGestureRecognizer *)gesture
{
    //Get touch point
    CGPoint touchPoint=[gesture locationInView:scr];

    //Hide keyBoard
    [self.view endEditing:YES];
}
于 2013-02-09T13:06:44.380 に答える
0

これを試して、

- (void)viewDidLoad
{
   [super viewDidLoad];

      UITapGestureRecognizer *tapGesture = [[UITapGestureRecognizer alloc] initWithTarget:self action:@selector(dismissKeyboard)];
      tapGesture.cancelsTouchesInView = NO;
      [scrollView addGestureRecognizer:tapGesture];
      [tapGesture release];
}
-(void)dismissKeyboard
{
    [txtNotes resignFirstResponder];
    [textView resignFirstResponder];
}
于 2013-02-09T05:50:21.350 に答える
0

のサブクラスにジェスチャを追加したときUIScrollView、サブビューをクリックしたり、ビューをスクロールしたり、すべての場合にキーボードを閉じたりできるなど、ビュー ツリー内のさまざまなジェスチャが互いに干渉するという問題がありました。のスーパークラスから、UIScrollViewまたはUIViewController.

このDismissKeyboardTapGestureクラスは ARC を使用し、ビューの下の任意のテキスト フィールドで動作し、ボタンなどのサブビューからのクリックを引き継ぎません。また、iOS7 のスクロール効果を利用して、キーボードを非表示にします。

UISScrollView スーパークラスからのセットアップ:

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

またはUIViewControllerから:

    _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
于 2013-11-01T19:59:26.710 に答える