ScrollView の縦スクロールを禁止!
昨日の記事で書いたようにScrollViewの上にTableViewのせた状態で、そのTableRow中にTextField等を乗せる。
そのTextFieldをクリックすると、入力のためのキーボードが表示されるのですが、TextFieldがキーボード表示により隠れる位置にあるとスクロールされます。
このスクロールが、ScrollViewとTableView両方に対して行われるんですが、ScrollViewは縦方向に動いてほしくないので、縦スクロールを禁止するScrollViewをModuleで作ってみました。
TiUIScrollView クラスの継承した HogeProjScrollView クラスと、
TiUITableViewProxy を継承した HogeProjScrollViewProxy クラスを新たに作成して、
HogeProjScrollView.m にスクロール発生時に呼ばれるメソッドの scrollViewDidScroll をオーバーライドします。
もしyの値が変わっている場合は、yの値を0としてProxyのscrollViewDidScrollをコールするように置き換えたらできました。
- (void)scrollViewDidScroll:(UIScrollView *)scrollView_ // any offset changes { if(scrollView_.contentOffset.y != 0){ CGPoint newOffset = CGPointMake(scrollView_.contentOffset.x, 0); scrollView_.contentOffset = newOffset; } [(id<UIScrollViewDelegate>)[self proxy] scrollViewDidScroll:scrollView_]; }
こんなんでいいんですかねぇw