2

私は、flickrの写真を取得するiPhoneアプリの既存のxcodeプロジェクトを使用しています。ユーザーがお気に入りの配列に写真を追加できるようにお気に入りボタンを追加したいのですが、これまでプログラムでUIオブジェクトを作成したことがないため、困惑しています。

これが私のボタンのコードですが、どのようにメソッドを追加しますか?また、このメソッド定義はどこに行きますか?

// Create favorites button
UIButton *favButton = [[UIButton buttonWithType:UIButtonTypeRoundedRect] retain];
favButton.frame = CGRectMake(200, 50, 100, 50);
[favButton setTitle:@"Favorite" forState:UIControlStateNormal];

favButton.backgroundColor = [UIColor clearColor];
[favButton setTitleColor:[UIColor blackColor] forState:UIControlStateNormal ];
UIImage *buttonImageNormal = [UIImage imageNamed:@"blueButton.png"];
UIImage *strechableButtonImageNormal = [buttonImageNormal stretchableImageWithLeftCapWidth:12 topCapHeight:0];
[favButton setBackgroundImage:strechableButtonImageNormal forState:UIControlStateNormal];
UIImage *buttonImagePressed = [UIImage imageNamed:@"whiteButton.png"];
UIImage *strechableButtonImagePressed = [buttonImagePressed stretchableImageWithLeftCapWidth:12 topCapHeight:0];
[favButton setBackgroundImage:strechableButtonImagePressed forState:UIControlStateHighlighted];
[favButton addTarget:self action:@selector(playAction:) forControlEvents:UIControlEventTouchUpInside];

[self.view addSubview:favButton];

addTargetメソッドはメソッドを追加する方法ですか?ボタンをクリックするたびに、xcodeに戻り、main.mファイルが表示され、次のコード行が強調表示されるためです。

int retVal = UIApplicationMain(argc, argv, nil, nil);

申し訳ありませんが、私はこれにまったく慣れていません。プロジェクトには次のファイルがあります。JSONFlickrAppDelegate.hJSONFlickrAppDelege.mJSONFlickrViewController.hJSONFlickrViewController.m ZoomedImageView.h ZoomedImageView.m

これが私が取り組んでいるxcodeプロジェクトです:http: //compsci.cis.uncw.edu/~pattersone/courses/275/resources/JSONFlickrPart3.zip

4

2 に答える 2

4

はい、これはメソッドを追加するメソッドです:

[favButton addTarget:self action:@selector(playAction:) forControlEvents:UIControlEventTouchUpInside];

ただし、呼び出されるメソッドはですplayAction:。addTargetの後にあるものはすべて、メソッドを呼び出すオブジェクトです。selfの場合、このボタンが作成されているオブジェクトがその中にあります。

于 2012-11-17T00:55:54.280 に答える
2

メソッドにターゲットを追加する方法に混乱があるようです。

addTargetメソッドはメソッドを追加する方法ですか?

はい。それで合っています。addTargetmethodは、ボタンに関連付けられたメソッドを追加する方法であり、メソッド定義は、addTargetparam(この場合selfは現在のクラスのオブジェクト)として記述されているクラスに記述する必要があります。

この行を使用すると、

[favButton addTarget:self action:@selector(playAction:) forControlEvents:UIControlEventTouchUpInside];

これは、ボタンに名前が付けられたメソッドを追加していることを意味します。このメソッドは、ユーザーがボタン内をタップしたときにイベントが発生した場合などのイベントplayAction:でターゲットで実行する必要があります。したがって、アクションは、オブジェクトによって表されるクラス、つまり、上記の行を記述したクラス内にある必要があります。同様の行を使用して、この同じボタンに任意の数のターゲットを追加できます。selfUIControlEventTouchUpInsideplayActionself[favButton addTarget:...addTarget

しかし、どのようにメソッドを追加しますか?また、このメソッド定義はどこに行きますか?

playAction:このシナリオでは、ターゲットをとして追加したため、同じクラスでメソッドを定義する必要がありますself。これは、任意のクラスの任意のオブジェクトに変更でき、メソッドはそのクラスで記述できます。

例:-

- (void)playAction:(id)button {
  //write the required code here, button is same as the favbutton which is written above.
}

ボタンをクリックするたびに、xcodeに戻り、main.mファイルが表示され、次のコード行が強調表示されるためです。

xcodeに戻ってが表示される理由は、クラスにメソッドを指定しmain.mていないためにクラッシュしているためです。playAction:ターゲットでそのようなメソッドを見つけることができないため、selfクラッシュし、main.mクラスを指す場合もあります。

次のようにターゲットを追加することもできます。

[favButton addTarget:self action:@selector(playAction) forControlEvents:UIControlEventTouchUpInside];//notice that it is 'playAction' and not 'playAction:' with a colon at the end.

この場合、メソッドは次のようになります。

- (void)playAction {
  //write the required code here
}

これらは、これを行うためのさまざまな方法です。

詳細については、このアップルのドキュメントを確認してください。

于 2012-11-17T01:35:22.000 に答える