6

Interface Builder でコントロールを移動し、UIView を渡すと。とにかく、IBがUIViewにコントロールを埋め込んでツリー階層のUIViewの子にするのを止める方法はありますか?

BEFORE
+UIView
+UIButton
+UIView

マウスで UIButton を移動し、UIView IB の上に配置すると、UIView の子になります

AFTER
+UIView
  +UIButton
+UIView

ボトムビューをロックする方法はありますか。私はしばしばそれらを背景として使用し、それらに色合いを付けます。

4

2 に答える 2

3

要素を長押ししCmdながらドラッグすると、埋め込まずに再配置できます。

編集: これは Xcode 7 でのみ動作することが確認されています。

于 2015-08-14T11:04:08.570 に答える
0

私はあきらめて、コントロールのすべてのグループに親 UIView を持たせることにしました。非表示にすることができます (clearColor の backgroundColor)

すべてのコントロールを選択し、[エディタ] メニュー > [ビューに埋め込む] を選択します。

その後、階層内のレベルをジャンプすることなく、独自のグループ化ビュー内で安全に移動できます。

Embed in View の 1 つの問題は、タグ付けと viewWithTag を使用する場合です。

複数の VC コントローラーとタグ サブビューを使用してビューを構築する場合は、タグ ID がビュー階層全体で一意であることを確認してください。

これは、viewWithTag: が id に一致する最初のコントロールのみを返し、レベルを下げて検索を続行する前にビュー階層全体を検索するように見えるためです。

したがって、[エディタ] メニュー > [ビューに埋め込む] を選択すると、コントロールが階層内の 1 ステップ下に移動します。そのため、viewWithTag:999 を呼び出すと、以前はコントロールが取得されていた可能性がありますが、今回はまったく異なるコントロールが返される可能性があります。

クラッシュすることもあります!UIView からの結果をコントロールにキャストするのが一般的です。たとえば、UIImageView 次に、コントロールのメソッドを呼び出します。viewWithTag が予期したものとは異なるコントロールを見つけた場合、それは UIImageView でさえない可能性があるため、欠落しているメソッドを呼び出すと例外がスローされます。

XIBとコードでデバッグする必要があり、IDの重複をチェックしないため、基本的にタグを使用しないでください。XIB から .h にドラッグし、代わりにアウトレットを作成します。

于 2013-01-10T11:36:45.007 に答える