2013-11-22 2 views
1

В Xcode (iPhone приложение) Я создал ряд кнопок программно, как это:Как передать кнопку тег в prepareForSegue

- (void)viewDidLoad 
{ 
    [super viewDidLoad]; 

    // By Road Button 
    byRoadButton = [UIButton buttonWithType:UIButtonTypeCustom]; 
    byRoadButton.tag = 3; 
    byRoadButton.frame = CGRectMake(20, 246, 280.f, 40.f); 
    UIImage *roadButton = [UIImage imageNamed:@"gettingHereByRoadButton.png"]; 
    [byRoadButton setBackgroundImage:roadButton forState:UIControlStateNormal]; 
    [self.view addSubview:byRoadButton]; 
    [byRoadButton addTarget:self action:@selector(byRoadButtonClicked) forControlEvents:UIControlEventTouchUpInside]; 
} 

Затем проверить, какая кнопка нажата в действии: @selector и вызвать performSegueWithIdentifier , NSLog показывает правильный тег кнопки здесь как проверку.

- (void) byRoadButtonClicked 
{ 
    NSLog(@"Button Pushed Tag Number: %d", byRoadButton.tag); 
    [self performSegueWithIdentifier:@"gettingHereSegue" sender:self]; 
} 

Но как передать тег кнопки для подготовкиForSegue? Идея состоит в том, чтобы передать этот тег для подготовкиForSegue и на основе номера тега передать информацию, связанную с этой кнопкой, в следующий ViewController?

Я пробовал:

[self performSegueWithIdentifier:@"gettingHereSegue" sender:byRoadButton.tag]; 

Но получить ошибку говоря Im пытается передать Int вместо идентификатора.

В моей prepareForSegue я следующее:

- (void) prepareForSegue:(UIStoryboardSegue *)segue sender:(id)sender 
{ 
    // ThIS IS WHAT I WANT TO DO - PSEUDO CODE 
    //int tagNumber = sender; 
    //if (tagNumber == 3) 
    //{ 
      //Set relevant content of Object here 
    //} 

    //THIS IS WHAT I CURRENTLY HAVE - NO CHECK FOR TAG 
    GettingHereContent *gettingHereContent = [[GettingHereContent alloc] init]; 
    gettingHereContent.content = @"This is my custom content based on this buttons click"; 

    GettingHereViewController *vc = (GettingHereViewController *)segue.destinationViewController; 
    vc.gettingHere = gettingHereContent; 
} 

Или может кто-нибудь предложить решение или, возможно, лучший способ сделать это, пожалуйста?

+1

Try [собственного performSegueWithIdentifier: @ отправителем "gettingHereSegue": byRoadButton]; а затем в prepareForSegue if (byRoadButton.tagNumber == 3) { // Установить соответствующее содержание объекта здесь } –

+0

Да, это сработало безупречно. И в prepareForSegue все, что мне нужно было сделать, это проверить, была ли кнопка равной отправителю: if (byRoadButton == sender) {// Сделать что-то здесь} Мне не нужно было беспокоиться о номере тега, чтобы проверить на нажатия кнопки , еще раз спасибо – heyred

ответ

2
// try This replace with your code 
[self performSegueWithIdentifier:@"gettingHereSegue" sender:byRoadButton]; 

-(void) prepareForSegue:(UIStoryboardSegue *)segue sender:(UIButton *)sender 
{ 
    NSLog(@"%ld",(long)sender.tag); 
} 
0

Попробуйте

[self performSegueWithIdentifier:@"gettingHereSegue" sender:byRoadButton]; 

, а затем в prepareForSegue

if (sender.tagNumber == 3) { //Set relevant content of Object here } 
Смежные вопросы