2013-08-08 1 views
1

Итак, у меня есть IBAction, подключенный к нескольким кнопкам в IB. Я хочу, чтобы это действие было запущено при вызове другого IBAction. Я также хочу, чтобы он распознал int из второго действия как тег [отправителя].Вызов IBAction в коде и отправка тега через слишком

// viewController.m

-(IBAction)buttonPress { 

int getInter = [sender tag]; 
UIView *tmpView = [self.view viewWithTag:getInter]; 
NSString *title = [(UIButton *)sender currentTitle]; 

} 

Я тогда другое действие, которое должно вызвать ButtonPress.

-(IBAction)secondButtonPress { 
    int varInt = 1 
    [self buttonPress: nil] <--- How do I pass varInt that buttonPress would recognise as a sender Tag here? 

} 

Я понимаю, что я мог бы просто создать кнопку, как так и дублировать код в secondButtonPress, но это, кажется, грязный ...

UIButton *tmpButton2 = (UIButton *)[self.view viewWithTag:varInt]; 

Таким образом, вопрос, есть ли способ обманывая buttonPress, чтобы подумать, что он был нажат и передал переменную через тег отправителя для этого действия. В какой-то мере программно обманывая кнопкуНажмите, чтобы подумать, что она нажата.

Заранее спасибо.

+0

Я смущен, почему бы просто не связать ваши кнопки с первым IBAction, какой целью служит вторая? –

+0

В основном первый - это клавиатура, вторая - это hintAction, но я подумал, что легче идентифицировать правильное письмо с ответом на клавиатуре, а затем программно «обмануть» клавиатуру. Нажав кнопку «Действие», подумайте, что она нажата. Я думал, что это будет намного быстрее, чем снова написать блок кода. –

+0

вот аналогичный вопрос http://stackoverflow.com/questions/2889408/whats-the-best-way-to-call-an-ibaction-from-within-code, но я не понимаю, что ответ Джорджа Оутс Ларсен или как его реализовать. –

ответ

2

Я в конечном итоге подключение его к тому же IBAction и работает, если заявление, чтобы сделать что-то, если этот тег был вызван.

Кажется простым сейчас!

-(IBAction)buttonPress { 

int getInter = [sender tag]; 

    if ([sender tag] == 2) { 
    //Do something just for that button. 
    } 

    else 
    { 
    UIView *tmpView = [self.view viewWithTag:getInter]; 
    NSString *title = [(UIButton *)sender currentTitle]; 
    } 
} 
1
UIButton *btn1 = [[UIButton alloc] initWithFrame:CGRectMake(10, 10, 20, 20)]; 
[btn1 setTitle:@"Button 1" forState:UIControlStateNormal]; 
btn1.tag = 1; 
[btn1 addTarget:self action:@selector(buttonClick:) forControlEvents:UIControlEventTouchUpInside]; 
[self.view addSubview:btn1]; 

UIButton *btn2 = [[UIButton alloc] initWithFrame:CGRectMake(10, 50, 20, 20)]; 
[btn2 setTitle:@"Button 2" forState:UIControlStateNormal]; 
btn2.tag = 2; 
[btn2 addTarget:self action:@selector(buttonClick:) forControlEvents:UIControlEventTouchUpInside]; 
[self.view addSubview:btn2]; 

UIButton *btn3 = [[UIButton alloc] initWithFrame:CGRectMake(10, 90, 20, 20)]; 
[btn3 setTitle:@"Button 3" forState:UIControlStateNormal]; 
btn3.tag = 3; 
[btn3 addTarget:self action:@selector(buttonClick:) forControlEvents:UIControlEventTouchUpInside]; 
[self.view addSubview:btn3]; 

кнопка записи метод нажмите следующим образом и получить кнопку тег в нем ..

-(IBAction)buttonClick:(id)sender { 
    UIButton *btn = (UIButton *) sender; 
    NSLog(@"%d",btn.tag); 
} 
+0

Есть ли способ отправить через переменную int в отличие от отправителя нажатия кнопки, как в вопросе? –

0

Просто установите метку в методе initWithNibName. Следуйте образцу и посмотрите, полезно ли это для вас!

@property(nonatomic,strong)IBOutlet UIButton *btn1; 
@property(nonatomic,strong)IBOutlet UIButton *btn2; 


- (id)initWithNibName:(NSString *)nibNameOrNil bundle:(NSBundle *)nibBundleOrNil 
{ 
    self = [super initWithNibName:nibNameOrNil bundle:nibBundleOrNil]; 
    if (self) { 

     // Set the Tag 
     self.btn1.tag=1; 
     self.btn1.tag=2; 

    } 
    return self; 
} 

-(IBAction)selectedButtonClick:(id)sender { 
    UIButton *btn = (UIButton *) sender; 
    NSLog(@"selectedButton%d",btn.tag); 
}