jubilee

Programing, Books and more...

UIScrollViewでタップ検知を追加

UIScrollViewはタップを検知しないため、レスポンダチェーンでVIewControllerまでtouchesBegan:withEventが通知されない。
なので、TextView入力時にキーボードに隠れないようにView位置を押し上げ、入力終了時に画面タップでキーボード非表示制御ができない。
解決法としては、タップイベントを次のレスポンダーに投げるようなUIScrollViewのカテゴリ(touchesBegan:withEvent)を作成する。

UIScrollView+TouchEvent.h

1
2
3
4
5
#import <UIKit/UIKit.h>

@interface UIScrollView (TouchEvent)

@end

UIScrollView+TouchEvent.m

1
2
3
4
5
6
7
8
9
10
#import "UIScrollView+TouchEvent.h"

@implementation UIScrollView (TouchEvent)

-(void)touchesBegan:(NSSet *)touches withEvent:(UIEvent *)event
{
    [[self nextResponder] touchesBegan:touches withEvent:event];
}

@end

ViewController.h

1
#import "UIScrollView+TouchEvent.h"

ViewController.m

1
2
3
4
5
- (void)touchesBegan:(NSSet *)touches withEvent:(UIEvent *)event
{
    // タップ時の処理を記述
    [self.view endEditing:YES];
}

ちなみに、「userInteractionEnabled = YES;」は記述しないでも動作している。

参考:
(http://qiita.com/Potof_/items/1432c39dab083f770e59)
(http://www.objectivec-iphone.com/event/touch-event/touchesBegan.html)