我有一个自定义的UITableViewCell子类,它在UIPopoverController的UITableView中呈现。 UIPopoverController来自UIBarButtonItem。
当在UITableViewCell中进行选择时,我将NSNotification发送到呈现UIPopoverController的UIViewController类。表中的选择在我的viewController中更新了我的视图。
现在,需要另一个UIBarButtonItem与popover中UITableViewCell中的一个按钮完全相同。基本上用例是这个功能似乎是我们的popover中最常用的功能,他们想要一个简单的方法来从另一个按钮打开和关闭它。
所以我做的是创建一个新的UIBarButtonItem,并附加一个目标:
- (void)FilterOn:(id)sender {
isFilterOn = !isFilterOn;
if ([sender isKindOfClass:[UIBarButtonItem class]]) {
UIBarButtonItem *filter = (UIBarButtonItem *)sender;
if (isFilterOn) {
[filter setTitle:@"Filter On"];
[self DoFilter];
}
else {
[aboutMeBBI setTitle:@"Filter Off"];
[self ClearFilter];
}
}
}
所以这部分有效。它更新模型,按钮的标题发生变化。问题是,让我说我打开过滤器,然后在弹出窗口中,我关闭过滤器。我将通知传递给我的viewController类,它的正常更新方法处理过滤和一堆其他东西。我从弹出框中按下过滤器按钮时添加了这个简单的片段:
- (void)FilterSortOptionDidSelect:(NSNotification *)notification {
NSDictionary *userDict = [notification userInfo];
NSInteger theTag = [[userDict objectForKey:@"CellTag"] integerValue];
switch (theTag) {
case FILTER: {
// update Model
[self.FilterBarButtonItem setTitle:@"Filter off"];
}
break;
default:
break;
}
}
这不是我想要的,因为如果我点击过滤器按钮,因为对于初学者,如果我点击“过滤器”按钮,它仍然会说“过滤器关闭”,并执行过滤关闭操作,然后,如果我再次点击它,它将对操作进行过滤。我尝试通过更改标题在switch语句中伪造它,但这不是我想要做的。我读了一些关于键值观察的内容,我不确定我是否可以在这里使用类似的东西,将我的按钮状态注册到UIPopoverController中UITableViewCell子类中的按钮状态。如果有人有任何想法会很棒。感谢。