iPhone SDK 2:nib ファイルからロードされたネストされたビューで UIButton が機能しない
-
12-09-2019 - |
質問
Nib ベースのビューにボタンのように動作しないボタンがあります (ターゲット メソッドが呼び出されることはありません)。ボタンを動的に追加しようとしましたが、役に立ちません。
アプリの構造について説明しようと思います (これがこの問題の原因である可能性があると思われるため) が、正しいデザイン パターンを使用していない可能性があります。
ビュー あ コントローラーに関連付けられています 交流. 。(ルート コントローラーのペン先からロードされ、ナビゲーション コントローラーにプッシュされます。)
ビュー A には複数のサブビューが埋め込まれています。それらの 1 つを A' と呼びましょう。
AC::viewDidLoad メソッド内:
3つのviewControllerをロードします a、b、c AC のメンバー変数に代入します。
アプリの設定によっては、 これらのコントローラーのいずれかのビューを A' のサブビューとして追加します
基本的に AC::viewDidLoad メソッド内では次のようになります。
[A' addSubView:(a.view)];
これで、ビューにボタン (タグが付けられています) が追加されました。そのタグを検索します。そしてターゲットメソッドを動的に追加します。この時点で、a.view が A' のサブビューとして表示され、ボタンも表示されます。素晴らしい。
ただしタッチインタラクションは発生しません または、タッチ アクションが私のメソッド以外の誰かによって消費されます。
多くのバリエーションを試しましたが、実行は私の方法に到達しませんでした。すべての touchUpEvents にターゲットを追加してみました。何もない。有効なイベントのコントロール値を確認しましたが、それは正しいです。そのボタンは何らかの理由で無効になっているだけです。1 つのビューを持つ単純なアプリを作成し、同じことを実行したところ、うまくいきました。したがって、それは私が複数の作品を組み合わせる方法に関係があるのではないかと考えています。
何か案は?
Spy++ のようなものがあれば、メッセージ キューを確認して、アプリの代わりに誰がこのメッセージを使用しているかを確認したり、クラス オブジェクトを確認したりできればよかったのにと思います。私はこのプラットフォームの初心者です。 これに関する私の以前の闘いはこのスレッドにあります。
解決 2
やっと解決しました!!!そしてその代わりに何かを学びました。これを理解するのに数日かかりました。
UIButton オブジェクトが機能しなかった理由は、UIIMageView オブジェクトの場合に次のことが判明したためです。
「画像付きの初期化:このメソッドは、指定された画像のサイズに合わせて受信機のフレームを調整します。また、デフォルトでは画像ビューに対するユーザーの操作も無効になります。」
そして 私の UIButton は、nib ファイル内の UIImageView コントロールのサブビューとして割り当てられていました !!!
エラーや警告はありませんでした。静かに無効化されるだけです。
解決: UIImageView とボタンを含むコンテナ UIView オブジェクトを作成しました。これにより、ボタンは画像にオーバーレイされて表示されますが、実際には画像の兄弟であり、ダミー コンテナ UIView のサブビューです。
他のヒント
ただ、すべてのその狂気を通して行っていない... UIImageViewのuserInteractionを有効!!!
view.userInteractionEnabled = YES;
クイック「健全性チェックは、」...ボタン変数がnilでないか。
ボタンをクリックすると、それを押したときに押し下げるように見える、と何も起こらない...またはボタンも押し下げたことがないんでしょうか?