#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 правильное значение. Теперь я хорошо реализовал ваше обновление. Спасибо за комментарий.