2013-08-06 12 views
7

I有する3つの容器のUITableViewの上のUIViewを移動 - 触れる上部のUIViewはまだテーブルの行を選択

Container A - contains a UITableView 
Container B - contains Container C and Container O 
Container C - contains a UITableView 
* - touch event 
@ - touch event 

---------------------- 
|  |    | 
| ---*|  B  | 
| --- |    | 
| -A- | ----------- | 
| --- ||@----C---- | | 
|  | ----------- | 
---------------------- 

Iは、コンテナBのフレームをシフト(及びIが示す場合、イベントが発生したが含まのUIView Bの右側にある(Oとラベル付けされた)ビュー(これは重要ではない)。今、コンテナB、コンテナA

O - Other view (unimportant) 
$ - original location of touch @ 

---------------------- 
| |    | | 
| --|*  B  | | 
| --|    | | 
| -A|------------ |O| 
| --||@-$--C----| | | 
| |------------ | | 
---------------------- 

を重ねている。しかし、私は行(@)の左端をタッチすることで、コンテナCののUITableViewで行を選択しようとすると、今、タッチがコンテナAののUITableViewによって登録されています。あるいは、テーブル(*)の上のビューをタッチしても、Aの対応する行が選択されます。

コンテナAのUITableViewの幅を変更することで、問題の一部を解決できます。しかし、私はまだテーブルC(@)に触れると、Cの行が選択されない問題があります。それは、テーブルCの開始点が古い場所($)にあるようなものです。

新しい@場所でタップすると、Cで正しい行が選択されるようにするにはどうすればよいですか?いくつかのコードと

=======

EDIT

これは、コンテナBにそれはBのフレームの非常にまっすぐ進むアニメーションだ私はコードです。 self.viewはコンテナBのUIViewです。

ストーリーボードを通じてすべてのビューが画面に表示されます(「その他の」コンテナは非表示になっています)。その他のコンテナはB.

// this code basically aligns the "other" container to the right/"offscreen" of 
// Container B. Yes extending beyond the frame of B, but this part works fine 
CGRect otherContainerFrame = self.otherContainerView.frame; 
otherContainerFrame.origin.x = CGRectGetMaxX(self.view.frame); 
[self.otherContainerView setFrame:otherContainerFrame]; 
[self.otherContainerView setHidden:NO]; 

// I'm going move Container B by the width of the "other" view 
float offset = CGRectGetWidth(self.otherContainerView.frame); 

CGRect frame = self.view.frame; 
frame.origin.x -= offset; 
[UIView animateWithDuration:.35 
       animations:^{ 
        [self.view setFrame:frame]; 
       } 
]; 

のサブビューである私はあなたが見たい、他のどのようなコード教えてください。

+0

非常に良い説明を、私は、我々はあなたがあなたのコンテナを表示してアニメーション化するために使用するコードを表示する必要があると思いますこの問題を解決してください... – Beppe

+1

@Beppe、私はアニメーションのためのコードを追加しました。 – David

答えて

0

の前にあることを確認ビューで起こっていたことを視覚的に(3dで)見ることができます。私が描いたダイアグラムは完全ではなく、誤解を招くようです。

各コンテナAとB(UIView)には、サブビューA 'とB'(UIView)も含まれています。私がself.viewを変更していたときのアニメーションブロックで、私はB 'のフレームを実際に動かしていました。フレームはそうもB「はAとAと重複した」B.

---------------------- 
| A' |  B'  | 
| ---*|  B  | 
| --- |    | 
| -A- | ----------- | 
| --- ||@----C---- | | 
|  | ----------- | 
---------------------- 

の境界の外に移動し、私は、タッチが依然として根底サブビュー(コンテナ)によって捕捉され、ビューの階層に仮定AとB.私は完全にこれが起こるべき方法だとは思っていませんが、それは物事がどのように落ちるかと思います。

とにかく、解決策は簡単でした。

の代わり:

[self.view setFrame:frame]; 

私は基本的に何をするつもりだ:

[self.view.superview setFrame:frame]; 
0

Mmm ...これがあなたのケースでは機能するかどうかはわかりませんが、他のすべてのコンテナを保持する大きなコンテナでアニメーションを管理してください。

私が意味する、B、OとそのサブビューをAが含まれているコンテナZを作成し、ZからBの位置をアニメーション化しようとすると、Bは、だから私はに明らかダウンロードA.

+0

提案に感謝します。私はAとBの親ViewControllerにロジックを移動し、同じ動作が存在します。 – David

関連する問題