4

簡単なビュー階層の例があります。

ここに画像の説明を入力してください

明らかに、メインビュースペースは、ユーザーが操作するプライマリスペースです。下部には、アプリの進行中の場所をユーザーに示すためにポップアップできるタブがあります。通常、これらのタブは、下部にある[カスタムタブ]の長方形で示されるスペースのみを占有しますが、[空のスペース]ボックスを埋めるために完全に拡張できます。

タブをクリックできるようにするには、タブビューのフレームを「カスタムタブ」スペースと「空のスペース」スペースの両方を含む完全な長方形にする必要がありました。これにより、タブがポップアップされていないときに「空のスペース」がユーザーに対して対話されなくなります。これは、入力が基本的にそのUIViewによって消費され、階層の残りの部分に転送されないためです。

この問題の根本は、「メインビュースペース」と「空のスペース+カスタムタブ」の両方がメインウィンドウのサブビューであることにあると思います。

ユーザーがインタラクティブな要素をアクティブにタップしなかった場合に、ユーザー入力を兄弟ビューに転送するようにシステムに指示する方法はありますか?たとえば、このビューが入力を使用しなかったことをOSに示すなどのメソッドを使用しtouchesBeganて何かを実行します。touchesEnded

編集

ビューの別のバージョンは、開いている1つのタブの状態を示しています。

ここに画像の説明を入力してください

EDIT2

いくつかの簡単なテストの後、デフォルトの動作では、一番上のビューが最初に入力を取得するように見えます。UIViewこれは、の上にクリアがある場合でも適用されますUITextField。クリアUIViewは入力を消費し、UITextFieldを編集できないようにします

EDIT3

タブの動作方法は、ユーザーがタブ(最初の画像のサイズ)をタップすると、タブが展開されて、そのタブに関連付けられたサムネイルビューが表示されます(2番目の画像のように)。その後、ユーザーはオプションでタブをもう一度タップして閉じ、サイズを元の画像に戻すことができます。タブを開いたときにクリックできるようにするには、基本的に、4つのタブすべてを開いているかのように含めるのに十分な大きさのビューを含める必要があります。これにより、含まれているビューに多くの空きスペースができます。この空のスペースは、画面上で本質的にデッドな入力スペースになります。メインビュースペースに空のスペースで覆われているボタンがある場合、ユーザーはそのボタンをクリックできません。その動作を回避し、空のスペースで覆われたボタンをクリックできるようにしたいと思います。

4

2 に答える 2

0

タッチを「転送」しようとするのではなく、タブビューがタブと同じ大きさになるようにレイアウトを変更し、.frame必要な場合にのみコード内でより大きな長方形になるように変更します。たとえば、タブがクリックされた場合:

 CGRect tabFrame = tabView.bounds;
 tabFrame.origin.y = top_of_emptySpace;
 tabFrame.size.height = height_of_emptySpace + height_of_tabView;
 tabView.frame = tabFrame;

次に、必要なコンテンツを追加できます。削除する必要がある場合は、コンテンツを削除してから次の手順を実行します。

 CGRect tabFrame = tabView.bounds;
 tabFrame.origin.y = top_of_tabView;
 tabFrame.size.height = height_of_tabView;
 tabView.frame = tabFrame;

コンテンツを好きなように表示するには微調整が必​​要な場合がありますが、このように、タブが最小化されている場合、メインビューがタッチに正しく応答するようにするために余分なことをする必要はありません。

于 2012-07-17T14:27:11.760 に答える
0

わかりました、これは私がそれをする方法です:

RootViewControllerには2つのビューがあります。1つは画面全体を占めるメインビューで、もう1つはウィンドウに追加されます。そしてタブビュー。

次に、別のビューコントローラー(理想的にはUINavigationController)をRootViewControllerに追加し、そのビューをRootViewControllerのビューのサブビューとして追加します。

新しいViewControllerのプッシュなど、実行された変更はすべて、子ViewControllerに対して行われます。

そうすれば、タブビューが常に表示されます。タブを開くには、アニメーションなどを使用して、タブバーの上に表示される新しいビューを作成できます。

于 2012-07-17T14:49:12.983 に答える