3

私は3つのボタンを持つメインビューを持っています。いずれかのボタンをクリックすると、サブビューが追加されます。

ボタンには異なるタイトルがあり、すべて IBAction "switchView" にリンクされています

「switchView」コードは以下のとおりです。

- (IBAction)switchView:(id)sender{
    secondView *myViewController = [[secondView alloc] initWithNibName:@"secondView" bundle:nil];
    [self.view addSubview:myViewController.view];
}

「secondView」が正しく読み込まれ、すべてが正常に機能します。

問題は、どのボタンが送信者であったかを知りたいということです。

各ボタンに 1 つずつ、3 つのサブビューを作成したくありません。コードと XIB はまったく同じです>

唯一の違いは、送信者 (クリックされたボタン) に応じて、2 番目のビュー (viewDidLoad メソッド) で設定したい変数です。

これは可能ですか?または、ボタンごとに1つずつ、3つのサブビューを作成する必要がありますか?

あなたの助けは大歓迎です!

4

3 に答える 3

16

tagプロパティを使用してさまざまなボタンを識別できます。例えばあなたの方法で:

-(IBAction)switchView:(id)sender {
    UIButton *button = (UIButton*)sender;
    if (button.tag == 1) {
        //TODO: Code here...
    } else if (button.tag == 2) {
        //TODO: Code here...
    } else {
        //TODO: Code here...
    }
}

tagプロパティは、InterfaceBuilderを介して設定できます。お役に立てれば。

于 2012-01-24T14:42:08.023 に答える
4

次の 2 つの方法で解決できると思います。

  1. ViewController に次のようなプロパティを作成し @property (nonatomic, strong) IBOutlet UIButton *button1, *button2, *button3; 、ボタンを XIB の参照アウトレットとしてリンクします。
  2. あなたのxibの各ボタンに異なるタグを付けて、送信者のタグをUIButton *b=(UIButton*)sender; b.tag;Markusのように詳細に投稿してください.
于 2012-01-24T14:43:53.293 に答える
0

私の問題を解決すると、mainView と subView の間でデータを転送することになりました。

mainView.h で、NSString とその @property を宣言しました

...

NSString *btnPressed;

}
@property(nonatomic, retain) NSString *btnPressed;

...

次に、switchView メソッド内の mainView.m で次のようにしました。

- (IBAction)switchView:(id)sender{

secondView *myViewController = [[secondView alloc] initWithNibName:@"secondView" bundle:nil];

btnPressed = [NSString stringWithFormat:@"%i", [sender tag]];

[myViewController setBtnPressed:self.btnPressed];

[self.view addSubview:myViewController.view];
}

上記のコードのこの行は、実際にデータを新しく作成されたサブビューに転送することを処理します。

[myViewController setBtnPressed:self.btnPressed];

次に、secondView.h でまったく同じ NSString *btnPressed とその @property を宣言します (ただし、これは main で宣言されたものとはまったく異なるオブジェクトです)

次に、secondView.m で、関心のある押されたボタンの値を取得します。

- (void)viewDidLoad {
[super viewDidLoad];

int theValueOfTheButtonPressed = [self.btnPressed intValue];
}

これはうまくいきます。

@synthesize btnPressed を忘れないでください。[btnPressed release]と同様に; mainView.m と secondView.m の両方で

于 2012-01-26T13:48:57.587 に答える