2012-01-24 3 views
3

私は3つのボタンを持つメインビューを持っています。いずれかのボタンをクリックすると、サブビューが追加されます。iOS - addSubviewに送信者(ボタン)名を渡します

のボタンは異なるタイトルを持っているし、すべての「のSwitchView」のコードは以下の通りですIBAction「のSwitchView」

にリンクされています。

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

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

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

ボタンごとに3つのサブビューを作成したくありません。コードとXIBは全く同じであろう>

唯一の違いは、私が(クリックされたボタン)送信者が誰であるかに応じて第2のビュー(viewDidLoadメソッド)で設定したい変数となり

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

ご協力いただきありがとうございます。

答えて

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... 
    } 
} 

タグプロパティはInterfaceBuilderから設定できます。 これが役立つことを願っています。

+0

THanks、しかし多分私は問題を正しく説明しなかった。 switchViewメソッド内でSenderを取得する方法を知っています。 それ以降の問題です。 switchViewメソッドはサブビューを開始します。このサブビューには、独自のsecondView.XIB、secondView.h、およびsecondView.mファイルがあります。 secondView.m((void)viewDidLoadメソッド内)どのボタンがsecondView.XIBを開始したかを調べたい – user885483

+0

これはおそらく不可能です。回避策は、switchViewメソッド内の "グローバル変数"にSenderタグを格納することです。 (私はNSUserDefaultsのキーとしてそれを保存することができます)。次に、それをsecondViewサブビューで取得します。 – user885483

+2

さて、分かりました。私のアプローチはあなたの - (IBAction)switchview:(id)送信者の中で新しいビューコントローラを呼び出すことです。メソッドを呼び出し、sender.tagを(id)initWith ...呼び出しのプロパティとして渡します。例: MyViewController * view = [[MyViewController alloc] initWithSenderTag:button.tag]; しかし、あなたはあなたのMyViewController内のグローバル変数としてbutton.tagを保存しなければならず、あなたの - (void)viewDidLoad内でチェックしてください。方法。 – Markus

4

私はあなたが2つの方法で解決することができると思う:あなたのViewControllerに @property (nonatomic, strong) IBOutlet UIButton *button1, *button2, *button3; 及びXIBのコンセントを参照すると、それらにボタンをリンク:

  1. のようなプロパティを作成します。
  2. xibの各ボタンに別のタグを付けて、MarkusのようにUIButton *b=(UIButton*)sender; b.tag;のように送信者のタグを尋ねてください。
0

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

私は

NSString *btnPressed; 

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

... NSStringの、その@property

を宣言...

その後、私がやったの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]; 

次に私の2番目のビュー。h私は全く同じNSString * btnPressedとその@propertyを宣言しますが(これはメインで宣言したオブジェクトとは全く異なるオブジェクトですが)

次にsecondView.mで私は興味があるボタンの値を取得します

- (void)viewDidLoad { 
[super viewDidLoad]; 

int theValueOfTheButtonPressed = [self.btnPressed intValue]; 
} 

これはうまくいきます。

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

関連する問題