2

私はiOSの初心者であり、プログラムでボタンを追加するプログラミングチュートリアルでは、ターゲットは常に自分自身に設定され、それが作成されているコントローラーにアクション(IBAction)が書き込まれます。または、Interface Builderを介して、ターゲットがファイルの所有者に設定されます。

私の質問は、どのシナリオ(例は素晴らしいでしょう)では、そのターゲットは自己ではないということです。

私が考えることができる1つのシナリオは、クラスの(ではないViewController)メソッドで、条件に応じてボタンが作成される場合です。そのクラスはではないためViewController、そのクラスのオブジェクトを初期化するときに、現在のオブジェクトへの参照ViewControllerが設定されます。ボタンが表示された場合、それはアクションが定義されているターゲットとして使用されます。

4

1 に答える 1

6

セレクターを任意のターゲットに向けることができます。通常、selfターゲットである理由は、コードでUIButton / UIBarButtonItemをインスタンス化するのが非常に普通であるためです。そのため、多くのチュートリアルには、セレクターが同じクラスで参照する実装が含まれています。

たとえば、View Controllerでインスタンス化されたときに、次のボタン呼び出しアクションのみを処理するように設計されたクラスを作成できます。

#import <UIKit/UIKit.h>
#import "OtherObject.h"

@interface SomeViewController : UIViewController

@property (strong, nonatomic) OtherObject *other;

@end

@implementation SomeViewController

@synthesize other;

- (void)viewDidLoad
{
    [super viewDidLoad];

    UIButton *someButton = [[UIButton alloc] initWithFrame:CGRectZero];
    [someButton addTarget:other action:@selector(someMethodInOther) forControlEvents:UIControlEventTouchUpInside];
    [self.view addSubview:someButton];

    UIButton *anotherButton = [[UIButton alloc] initWithFrame:CGRectZero];
    [anotherButton addTarget:other action:@selector(anotherMethodInOther) forControlEvents:UIControlEventTouchUpInside];
    [self.view addSubview:anotherButton];
}

@end

IBActionを使用すると、メソッドの実装をxib/storyboardを介して接続できることをInterfaceBuilderに通知できます。

于 2012-07-09T06:30:36.980 に答える