2013-11-27 4 views
0

У меня есть стол. Когда я нажимаю на ячейку, вы должны выполнить. Я стараюсь использовать prepareForSegue и performSegueWithIdentifier, но без каких-либо результатов. Мой код:Таблица Cell Segue

-(void)prepareForSegue:(UIStoryboardSegue *)segue sender:(id)sender 
     { 

      if([segue.identifier isEqualToString:@"OpenB"]){ 

       OpenBViewController *controller = (OpenBViewController *)segue.destinationViewController; 
       controller.address = self.selectedCellText; 
       [self performSegueWithIdentifier:@"OpenB" sender:self]; 
      } 
    } 
     - (void)tableView:(UITableView *)tableView didSelectRowAtIndexPath:(NSIndexPath *)indexPath{ 

      self.selectedCellText = [[[tableView cellForRowAtIndexPath:indexPath] textLabel] text]; 
      [self performSegueWithIdentifier:@"OpenB" sender:self]; 
      [tableView deselectRowAtIndexPath:indexPath animated:YES]; 
     } 
+2

Удалить '[self performSegueWithIdentifier: @" OpenB "отправитель: self];' in 'prepareForSegue' – Larme

+0

сделано. нет результата – STBY

+0

Просматриваете ли вы код? Любые точки останова или NSLog? – Larme

ответ

0

Прежде всего, вы не должны вызывать [self performSegueWithIdentifier:@"OpenB" sender:self]; внутри -prepareForSegue: метода, так как -prepareForSegue вызывается, когда переход собирается быть.

Во-вторых, убедитесь, что у вас есть настройка segue правильно. Убедитесь, что вы предоставили тот же идентификатор в Segue в раскадровке, что вы используете с -performSegueWithIdentifier:

+0

Это не работает. Я проверил все идентификаторы, удалив [self performSegueWithIdentifier: @ "OpenB" отправитель: self]; – STBY

+0

Является ли ваш '-prepareForSegue:' вызывается после вызова функции execute -performSegueWithIdentifier: 'в методе tabled's -didSelectRow? Также попробуйте удалить segue из раскадровки и создать новый и назначить ему другой идентификатор.Также измените свой код, чтобы использовать этот идентификатор. –

+0

вызов только функции cellForRorIndexPath – STBY

0

Ваш код должен выглядеть следующим образом:

-(void)prepareForSegue:(UIStoryboardSegue *)segue sender:(id)sender 
{ 
    if([segue.identifier isEqualToString:@"OpenB"]){ 

     OpenBViewController *controller = (OpenBViewController *)segue.destinationViewController; 
     controller.address = self.selectedCellText; 
    } 
} 
- (void)tableView:(UITableView *)tableView didSelectRowAtIndexPath:(NSIndexPath *)indexPath{ 

    self.selectedCellText = [[[tableView cellForRowAtIndexPath:indexPath] textLabel] text]; 
    [self performSegueWithIdentifier:@"OpenB" sender:self]; 
    [tableView deselectRowAtIndexPath:indexPath animated:YES]; 
} 

И имейте в виду, чтобы настроить SEGUE с идентификатором OpenB в раскадровки.

+0

не работает. segue id в раскадровке - OpenB – STBY

+0

Какую ошибку вы сейчас получаете? –

+0

Ошибка. Но мнения не меняются – STBY

0

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

Кроме того, весь код находится в Swift 3, поскольку мое знание синтаксиса Objective C находится рядом с nil.

Проблема заключалась в том, что, скорее всего, метод didSelectRow() вызывается после Segue была отодвинута. Поэтому при вызове prepare(ForSegue) переменная selectedTextCell не была правильно инициализирована.

Если вы подключаетесь к ячейке к следующему ViewController через segue, созданный в Interface Builder, вам не нужно использовать didSelectRow(), и, вероятно, вам этого не нужно, так как segue, скорее всего, всегда будет нажат раньше didSelectRow().

В этом случае все, что вам нужно сделать, это получить информацию из ячейки в методе prepare().

Подпись:

func prepare(for segue: UIStoryboardSegue, sender: Any?) 

Отправитель какой объект вызывает переход. В этом случае выбранную ячейку. Таким образом, в подготовке(), можно было бы написать что-то вроде этого:

let myCell = sender as! UITableViewCell 
controller.address = myCell.textLabel.text 

Если вам необходимо получить доступ к строке, например, было бы:

controller.idx = self.tableView.indexPath(for: sender as! UITableViewCell)?.row 

Конечно, UITableViewCell можно заменить любым специальным классом ячеек, который у вас может быть.

Смежные вопросы