私は3つのUIViewsはスタッキングUITableViewsは、そのビューの下のタッチイベントを渡しません
テーブルビューが下部にトップとrootViewにある別の
のUITableView
planeView
rootViewの上に積み重ねたのです。私は、これらの機能は、すなわちテーブルビュー最上位のビューがタッチされたときに呼び出されるまたは移動されることを期待し
/*code in rootView*/
- (void)touchesBegan:(NSSet *)touches withEvent:(UIEvent *)event {}
- (void)touchesMoved:(NSSet *)touches withEvent:(UIEvent *)event {}
- (void)touchesEnded:(NSSet *)touches withEvent:(UIEvent *)event {}
rootViewに次のコードを実装している
(テーブルビューがそれの上にあるようrootViewは表示されません)それどころか、機能のどれも呼ばれなかった。
予想通りrootView方法が
/*code in TableView so that the rootView methods are called(TableView is the subview of rootView)*/
- (void)touchesBegan:(NSSet *)touches withEvent:(UIEvent *)event
{
[super touchesBegan:touches withEvent:event];
[self.superview touchesBegan:touches withEvent:event];
}
と呼ばれているように、私はまた、テーブルビューで次のコードを入れてみました、それはそのようにしたが、問題は
- (void)tableView:(UITableView *)tableView didSelectRowAtIndexPath:(NSIndexPath *)indexPath
のようなテーブルビューのデリゲートがないということですと呼ばれる。
TableViewクラス(didSelectRow :)とtouchesBegan:に実装されたTableViewデリゲートが確実に保証される方法はありますか?touchesMoved .. rootViewの関数もそれに応じて呼び出されますか?
つまり、TableViewをクリックすると、 - > TableViewの(didSelectRow:atIndex)関数と - > rootViewの(touchesBeganおよびtouchesEnd)メソッドが呼び出されます。ここでの違いは、あなたの代わりにスーパーの次のレスポンダにタッチを渡している、とあなたがこれをやっているということです
- (void)touchesBegan:(NSSet *)touches withEvent:(UIEvent *)event
{
[self.nextResponder touchesBegan:touches withEvent:event];
[super touchesBegan:touches withEvent:event];
}
:
素晴らしいのですが、助けてくれてありがとう – prajul
まだtouchesEnded:は呼び出されていませんtouchesEnded:メッセージでビューの位置を調整しましたが、メッセージが常に渡されないため、ビューの調整は私は期待どおりに動作しません。 – prajul
@prajul:ええ、私は現在、同様の問題を抱えています。テーブルビューは本当に複雑な獣です。基本的なタッチを使用しているかどうかに応じて、私が試した別のことは、テーブルビューの上に透明なUIViewを配置することです。上記のコードのような接触を通過すると、テーブルビューはまだ正しく動作しません(クリックすることはできますが、スクロールすることはできません)。しかし、代わりに 'hitTest:withEvent:'を渡すと、テーブルビューは通常のように動作し、オーバーレイのuiviewの最初のhitTestを使用して、ボタンをクリックするか何かを行うことができます。 – MusiGenesis