4

.xib向きごとに異なる読み込みを行うシンプルなアプリを作成しました。

私は2つのxibを持ってPortxibおりLandxib、両方のxibで、ボタンをドラッグして割り当てました

1両方のxibの場合と同様に、値をタグ付けします。

そして私はこのコードを自分で書いたviewDidLoad

UIButton *btn=(UIButton *)[self.view viewWithTag:1];
    [btn addTarget:self action:@selector(BtnClick:) forControlEvents:UIControlEventTouchUpInside];

これがセレクターメソッドです。

-(void)BtnClick:(id)sender
    {
        NSLog(@"BtnClick");
    }

UIButtonのクリックイベントが発生していません...

また

両方の方向から同じボタンのメソッドを呼び出す他の方法はありますか?

編集 :

.h file

.m file

4

3 に答える 3

6

確実に...

  1. xibボタンは、で見つけたときにルートビューに配置されます。self.viewまたは、ボタンが正しいビューに配置されていることを確認し、そのビューを次のように使用します。viewWithTag
  2. タグ1を割り当てたので、同じビュー内の他のコントロールにタグ1がないことを確認してください。それ以外の場合、ボタンはタグによって認識されません。これがあなたのケースになる場合は、ボタンのタグを999などのそのビューの非常に珍しい番号に変更してテストしてください。

編集

コードを設定した場所で、表示が認識されていないように感じviewDidLoadます。したがって、nibを読み込んだ後、そのコードをコメントアウトして、 changeOrientationメソッドにviewDidLoadシフトします。

-(void)changeOrientation
{
    UIInterfaceOrientation orientation =  [[UIApplication sharedApplication] statusBarOrientation];


    if(orientation==UIInterfaceOrientationPortrait || orientation==UIInterfaceOrientationPortraitUpsideDown)
    {
        [[NSBundle mainBundle] loadNibNamed:@"PortraitXib" owner:self options:nil];
    }
    else 
    {
        [[NSBundle mainBundle] loadNibNamed:@"LandscapeXib" owner:self options:nil];
    }

    //Adding this code here makes sense that nib is loaded and after that we are recognizing button from loaded view of nib.
    UIButton *btn = (UIButton*)[self.view viewWithTag:1];
    [btn addTarget:self action:@selector(BtnClick:) forControlEvents:UIControlEventTouchUpInside];    
}

お役に立てれば。

于 2013-03-21T12:14:25.307 に答える
5

ヘッダーファイルに追加

IBOutlet UIButton *btn;

xibファイルからこのbtnを参照してください。

ここであなたの場合、あなたが使用しているbtnはxibファイルから参照されていないので、メソッドは起動していません

-(IBAction)BtnClick:(id)sender
{
    NSLog(@"BtnClick");
}

関数をIBActionとして作成し、これをnibbtnから参照します。この場合、ターゲットを明示的に追加する必要はありません。

ペン先にボタンを追加しない場合は、ビューに初期化してサブビューを追加することを忘れないでください

このチュートリアルはhttp://www.idev101.com/learn/interface_builder_connections.htmlでご覧いただけます。

編集 何が印刷されているかを確認しますか?

     for (UIButton *but in [self.view subviews])
     {
            NSLog("but.tag %d",but.tag);
            if(but.tag==1)// compare for same row elements
            {
            NSLog("Button Added");

              [btn addTarget:self action:@selector(BtnClick:) forControlEvents:UIControlEventTouchUpInside];
            }
      }
于 2013-03-21T12:08:28.800 に答える
0

このようなボタンを追加できます。これをdidLoadメソッドに追加します

 UIButton* aButton = [UIButton buttonWithType:UIButtonTypeRoundedRect];
  [aButton setTag:1];
  [aButton addTarget:self action:@selector(buttonClicked:) forControlEvents:UIControlEventTouchUpInside];
  [aView addSubview:aButton];
}

// then ...

- (void)buttonClicked:(UIButton*)button
{
  NSLog(@"Button %d clicked.", [button tag]);
}
于 2013-03-21T12:12:10.713 に答える