【发布时间】:2014-04-23 18:52:00
【问题描述】:
我遇到了一个看似简单的问题,但我无法弄清楚它为什么不起作用。
我有一个标签栏,其中一个表视图(时间轴)用于主应用程序,一个用于设置。如果用户单击设置选项卡,他们就有机会选择一个主题,该主题只是另一个表格视图的形式,其中有许多代表主题的单元格。
如果用户点击主题“黑色”,我希望标签栏中的其他表格视图更改主题。
我不担心主题的实现;尽管我已经遵循了我认为在我的应用程序中使用其他委托协议所遵循的相同步骤,但我似乎在这里遇到了我的委托协议的问题。
这是我的主题表格视图:
// .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 显示我选择了“黑色”单元格,当委托发生在时间轴上时,它总是为零。
我正在使用带有自定义静态单元格的分组表视图(据我所知,ThemesTableView 上不需要 cellForRowAtIndexPath,是吗?
更新:SelectThemesTableViewController
在情节提要中,SelectThemesTableViewController 是从 Settings Table View Controller 选项卡形成的 segue(推送)。所以我在标签栏中有两个标签;第一个是时间轴,第二个是 SettingsTableViewController。这是嵌入在导航控制器中的。 Table 视图中的第一个单元格称为“Themes”,单击该单元格后,SelectThemesTableViewController 会出现一个 segue(推送)。我没有在任何地方准备ForSegue,但这让我想到也许我应该这样做?
我错过了什么?任何帮助将不胜感激!
【问题讨论】:
标签: ios iphone uitableview protocols delegation