У меня есть то, что кажется простой проблемой, и я просто не могу понять, почему он не работает.Простой протокол делегата iOS не работает с передачей строк между контроллерами просмотра
У меня есть панель вкладок с одним табличным видом (временная шкала) для основного приложения и одна для настроек. Если пользователь нажимает на вкладку настроек, у них есть возможность выбрать тему, которая находится только в виде другого представления таблицы с количеством ячеек, представляющих темы.
Если пользователь нажимает на тему «Черный», я хочу, чтобы другой Table View на панели вкладок менял тему.
Я не беспокоюсь о реализации темы; Кажется, у меня проблемы с протоколом моей делегации, хотя я следил за тем, что, по моему мнению, был тем же самым шагом, который я выполнил для других целей использования протоколов делегирования в моем приложении.
Вот мой Table View для темы:
// .h
@class SelectThemesTableViewController;
@protocol SelectThemesTableViewControllerDelegate <NSObject>
- (void)selectThemesTableViewController:(SelectThemesTableViewController *)controller didSelectCell:(NSString *)selectedTheme;
@end
@interface SelectThemesTableViewController : UITableViewController
@property (nonatomic, weak) id <SelectThemesTableViewControllerDelegate> delegate;
@property (nonatomic, strong) NSString *selectedTheme;
// .m
- (void)tableView:(UITableView *)tableView didSelectRowAtIndexPath:(NSIndexPath *)indexPath
{
UITableViewCell *selectedCell = [tableView cellForRowAtIndexPath:indexPath];
self.selectedTheme = selectedCell.textLabel.text;
[self.delegate selectThemesTableViewController:self didSelectCell:self.selectedTheme];
NSLog(@"The value of the selected cell is %@", self.selectedTheme);
}
В главном виде таблицы, где я хочу строка, которая передается:
// .h
@property (nonatomic, strong) NSString *selectedTheme;
// .m
@interface TimelineTableViewController() <UITableViewDataSource, UITableViewDelegate, UISearchBarDelegate, NSFetchedResultsControllerDelegate, SelectThemesTableViewControllerDelegate>
@end
- (void)viewWillAppear:(BOOL)animated
{
[super viewWillAppear:animated];
SelectThemesTableViewController *selectThemesTableViewController = [[SelectThemesTableViewController alloc] init];
selectThemesTableViewController.delegate = self;
NSLog(@"What is this value %@", self.selectedTheme);
if ([self.selectedTheme isEqualToString:@"Black"])
{
NSLog(@"The value is %@", self.selectedTheme);
}
else
{
NSLog(@"Nope");
}
}
// Here in the viewWillAppear, I'm clearly setting the delegate but the self.selectedTheme is always nil.
// Delegate method in the Timeline Table view:
- (void)selectThemesTableViewController:(SelectThemesTableViewController *)controller didSelectCell:(NSString *)selectedTheme
{
self.selectedTheme = selectedTheme;
NSLog(@"String = %@", self.selectedTheme);
// The selectedTheme is always nil here
}
Я поставил контрольные точки в и последовал след, но в то время как в themeTableView NSLog показывает, что я выбираю «черную» ячейку, когда делегация происходит с временной шкалой, она всегда равна нулю.
Я использую сгруппированный вид таблицы с пользовательским статической ячейкой (так, насколько я понимаю, нет необходимости в cellForRowAtIndexPath на ThemesTableView, есть
Update: SelectThemesTableViewController
В раскадровке , SelectThemesTableViewController формируется как segue (push) с вкладки Control Table View Controller. Таким образом, у меня есть две вкладки на панели вкладок, первая - это временная шкала, а вторая - SettingsTableViewController. Она встроена в контроллер навигации. Первая ячейка в представлении «Таблица» называется «Темы», и, щелкнув по нему, есть segue (push) для SelectThemesTableViewController. Я не готовлюFo rSegue где угодно, но это заставляет меня думать, что, возможно, я должен быть?
Что мне не хватает? Любая помощь будет действительно оценена!
Что абсолютно! Большое спасибо Сэму - если бы я мог проголосовать за него много раз, я бы это сделал. Используя этот метод, я могу обеспечить согласованность на протяжении всего жизненного цикла приложения, когда он закрывается и удаляется из многозадачности. Спасибо вам большое за это. Действительно большая помощь! – amitsbajaj