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)