didSelectRowAtIndexPath: передача текстового значения другому методу

#ios #variables #global-variables #didselectrowatindexpath

#iOS #переменные #глобальные переменные #didselectrowatindexpath

Вопрос:

  • Я создаю свое первое приложение. По сути, у меня есть что-то вроде меню в tableView .

  • Когда пользователи нажимают на ячейку, это должно привести их к другому представлению, отображающему локальный HTML-контент. Работает нормально.

  • Однако я хотел бы сохранить текстовое значение выбранной строки и передать его другому методу (from didSelectRowAtIndexPath: to the prepareForSegue: method ).

  • Я много чего перепробовал, но кажется, что текстовая переменная каким-то образом локальна для didSelectRowAtIndexPath: метода, хотя я объявил ее в заголовке.

Итак, кто-нибудь знает, что я делаю не так?

Ниже приведен некоторый фрагмент кода.


Файл заголовка:

 #import <UIKit/UIKit.h>

@interface SidebarViewController : UITableViewController {

NSString *rowText;

}

@end
  

Реализация:

 - (void)tableView:(UITableView *)tableView didSelectRowAtIndexPath:(NSIndexPath   *)indexPath {

    UILabel *mySubNameLabel = (UILabel *)[cell viewWithTag:201];
    NSString *rowText = mySubNameLabel.text;


    if ([mySubNameLabel.text isEqualToString: @"What is a dataset"]) {
        [self performSegueWithIdentifier:@"showLab" sender:cell];
    }

    return;
}


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

   NSString *myLabel = rowText ;
   ViewController *detailsTVC = [segue destinationViewController];
   detailsTVC.label = myLabel; //rowText;
   }

}

@end
  
  • В качестве последнего замечания следует упомянуть, что: * rowText возвращает правильную текстовую строку в первом методе.
  • Однако во втором методе NSString *myLabel = rowText ; он возвращает значение nil .

Комментарии:

1. В didSelectRowAtIndexPath вы создаете новую переменную rowText вместо заполнения переменной вашего экземпляра (_rowText = mySubNameLabel.text).

2. Вау, это было просто. Спасибо.

Ответ №1:

попробуйте изменить

   NSString *rowText = mySubNameLabel.text;
  

Для :

   _rowText = mySubNameLabel.text;
  

Ответ №2:

Вы не можете назначить NSString как UILabel . Вам нужно передать like UILabel.text .

  • NSString *myLabel = rowText ; здесь myLabel — это ваша строка.
  • detailsTVC.label = myLabel; здесь вам нужно передать значение в label..

Попробуйте этот код:

 if ([segue.identifier isEqualToString:@"showWeb"]) 
{
   ViewController *detailsTVC = [segue destinationViewController];
   detailsTVC.label.text = rowText; // rowText must be string
}
  

Комментарии:

1. Единственная причина, по которой я включил строку: NSString *myLabel = rowText ;, заключалась в том, чтобы включить строку разрыва и проверить, имеет ли rowText правильное значение. Теперь я хорошо реализовал ваше обновление. Спасибо за комментарий.