4

私はXIBを使って空想をしようとしています.XIBからロードされた画像のパスを何らかの形で取得して保存したいということも含まれています. これを行うために、いくつかのカテゴリを作成し、親コンストラクターを呼び出す前にパスを保存するために、すべての UIImage コンストラクターをオーバーライドするメソッド スウィズリングを行いました。

しかし、すべての XIB を備えた Apple のブラック ボックス BS により、[UIViewController initWithNib...] を介して UIImageView を作成すると、UIImage の公開されたコンストラクターはまったく呼び出されないようです。

どのような関数呼び出しが行われるか、またはどのようにこれを行うかを知っている人はいますか? initWithNib が実際に舞台裏で何をしているのかを明らかにする情報はまったく見つかりません。

ありがとう!

編集: 同様の状況にある場合は、画像パスが自動的に入力される accessibilityLabel / accessibilityHint を使用してみてください。唯一の問題は、アクセシビリティを有効にする必要があるか、これらの値が nil であることです。

4

3 に答える 3

2

Nib から構築されたオブジェクトが NSCoding プロトコルに従ってアーカイブ解除されていることは知っています。この場合、オーバーライドする必要がありますinitWithCoder:

スウィズリングを使用して UIImageView のinitWithCoder:メソッドを置き換え、スヌープして、コーダーのキーのいずれかで画像名またはパスが使用可能かどうかを確認できます。これは、UIImageView がアクセス権のないカスタム サブクラスを使用している可能性があることがわかっているため、UIImage 自体をハッキングするよりも効果的である可能性があります。

于 2012-04-03T22:53:37.827 に答える
1

initWith...メソッドは、プログラムオブジェクトを作成するためのUIImageViewものです。

XIBファイルからインスタンス化されるので、物事をキャッチしたいようです。それが親クラスUIView[initWithCoder:]メソッドになります。

UIViewドキュメントが言うように:

initWithCoder:-Interface Builderのnibファイルからビューをロードし、ビューにカスタムの初期化が必要な場合は、このメソッドを実装します。

于 2012-04-03T22:51:52.520 に答える
1

あなたは両方とも右に近いです-私はこれを試してみましUIImageViewinitWithCoderinitWithCoderただし、何らかの理由でUIImage が呼び出されず、代わりにinitWithCGImageStored:(CGImageRef)cgImage scale:(CGFloat)scale orientation:(UIImageOrientation)orientation.

私が望むように、実際にこれからの道を見つけたら、ここに投稿します。助けてくれてありがとう、紳士。

于 2012-04-03T23:01:40.283 に答える