0

ストーリーボード機能を使用してXCode4.2でアプリを作成しています。ナビゲーションコントローラーに基づいて4つのビューが接続されています。ビューの1つに、テキストボックスとボタンがあります。デリゲートとしてテキストボックスを追加することにより、リターン時にキーボードの非表示を実装しました。テキストボックスボックスへの入力が完了したら、ボタンを押すとUIImageViewが更新されます。

Interface BuilderのUIImageViewと、インターフェイスファイルで宣言したUIImageViewIBoutletの間に何らかの関係を確立する必要があることを理解しています。しかし、ストーリーボードの状況でこれを行うにはどうすればよいですか?

abcViewController.h私は持ってい ます

@interface abcViewController:UIViewController {   
   IBOutlet UITextField * code;    
   IBOutlet UIImageView * qrImage;  
}  
@property(noatomic、retain)UITextField * code;  
@property(noatomic、retain)UIImageView * qrImage  
-(IBAction)textFieldReturn:(id)sender;  
-(IBAction)goButton:(id)sender;

abcViewController.m私は持っています

@synthesizeコード;
 @synthasize qrImage;
-(IBAction)textFieldReturn:(id)sender {
   [送信者resignFirstResponder];
}
-(IBAction)goPressed:(id)sender {
   [qrImage setImage:[UIImage imageNamed:@ "qr.png"]];
}

Interface Builderで、テキストボックスとボタンのビューで対応するイベントとMainStoryboard.storyboardの関係を確立し、このビューのデリゲートとしてテキストボックスをリンクしました。ここで、UIImageViewerを `First Responderにも接続する必要がありますか?はいの場合、どのように?First RespondertextFieldReturngoPress

4

2 に答える 2

1

まず、ViewControllerクラスがストーリーボードで作成したViewControllerにリンクされていることを確認する必要があります。

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

次に、コードで宣言したオブジェクトをストーリーボードのオブジェクトにリンクし、xibsの場合と同じようにドラッグアンドドロップします。

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

于 2012-05-04T01:46:59.530 に答える
1

いくつかの用語を間違って使用していると思いますが、InterfaceBuilderのビューとコードの間で作成できる接続には2つの異なるタイプがあります。1番目の応答者とボタンおよびテキストフィールドの間に「関係を確立した」と言うと、アクションを接続したように聞こえます。これは、ビュー(ボタン、テキストフィールドなど)からパスを作成することです。接続したオブジェクト(この場合、最初に応答したオブジェクト、基本的にはabcViewController)。これを一方向のパスと考えてください。イベントが発生したため、これらのコントロール(ボタンとテキストフィールド)にメッセージを送信する場所を指示するだけです。そのため、ボタンがクリックされると、接続されている場合、どこかにメッセージを送信する動作が組み込まれています。これをabcViewControllerのgoPressed:アクションに接続したので、それが実行されます。

コインの反対側は、ViewControllerがコントロールにメッセージを送り返すことができることを確認しています。それがアウトレットの目的です。アウトレットを設定したようには聞こえないため、abcViewControllerには、表示する必要があるというメッセージを画像ビューに送信したり、画像を変更したりする方法がありません。

最初にすべきことは、プロパティをIBOutletsとしても定義することです。たとえば、次のようになります。

@property (noatomic, retain) IBOutlet UITextField *code;

次に、Interface Builderに戻って、インスペクターの[接続]タブに移動すると、[First Responder]を選択すると、すべてのアウトレットが一覧表示されます。ファーストレスポンダー(abcViewController)のアウトレットを対応するビューに接続(ドットからドラッグ)する必要があります。これにより、ビューコントローラからビューへのパスが作成さます(アクションで行ったのとは逆になります)。

それが完了したら、コードで何かを実行するようにオブジェクトに指示すると、ビューが読み込まれたときに、そのメッセージがXIBから作成されたオブジェクトに転送されます。

于 2012-05-04T01:56:38.647 に答える