2013-03-21 4 views
4

Я сделал простое приложение, в котором я загрузку различных .xib на каждую ориентации,Нажмите событие UIButton не уволит

Я два XIB-х Portxib и Landxib, в обоих xibs, я потащил кнопку и назначен

значение тега для него как 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 не увольняют ...

ИЛИ

Есть ли другой способ вызова того же метода кнопки из b oth ориентация ??

EDIT:

.h file

.m file

+0

Вы можете попробовать добавить код в willAnimateRotationToInterfaceOrientation, чтобы уволить в обеих ориентациях –

+0

Вы можете попробовать мой ответ, чтобы вызвать тот же метод из обоих XIB. – Vedchi

+0

- это событие, нажатое на кнопку нажатием на любую ориентацию? либо в пейзаже или в портрете? –

ответ

6

Убедитесь, что ...

  1. Кнопка находится в корневом зрении в xib, как вы найти его в self.view ИЛИ убедитесь, что он находится в правильном зрении и использовать эту точку зрения с viewWithTag
  2. Вы назначили тэг , так что просто сделать конечно нет другого контроля в пределах такой же вид есть тег 1 другая мудрая кнопка не будет распознана тегом. Если это будет ваш случай, просто измените тег кнопки на очень необычный номер для этого вида, например 999, или что-нибудь еще и тест.

EDIT

Я чувствую, как вы смотреть, не получает признания в viewDidLoad, где вы настроили ваш код. Так что просто закомментируйте этот код в viewDidLoad и переместите в свой changeOrientation метод после загрузки nib.

-(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];  
} 

Надеюсь, это поможет.

+0

Я создал класс без xib и добавил два xib для портретов и другой для пейзажа, в xib есть кнопка с тем же тегом .. но все равно щелчок события не срабатывает. – Krunal

+0

Просто просим вас не иметь никакого другого элемента управления в xib с тегом 1, кроме вашей кнопки. –

+0

да, только кнопка имеет тег 1 – Krunal

5

В заголовочном файле добавьте

IBOutlet UIButton *btn; 

ссылается на эту BTN от вашего xib-файлы.

Здесь в вашем случае БТНЫ вы используете не ссылается из XIb файлов, так что этот метод не стреляя

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

делает функция, как IBAction и ссылки этого от кончика пера БТНО. В этом случае вам не нужно явно добавлять addtarget.

Если вы не добавляете кнопку в бобах, то не забудьте инициализировать и addsubview с точки зрения

Вы можете увидеть этот учебник http://www.idev101.com/learn/interface_builder_connections.html

EDIT Проверьте, что печать?

 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]; 
      } 
     } 
+0

log показывает, что btn.tag является '1' и показывает' Button Added', но все равно щелчок события не запускается. :( – Krunal

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]); 
} 
Смежные вопросы