我有一个FSDDropdownPicker类的对象(一个下拉菜单),我想编辑下拉菜单中的一个条目。这样做后,我将对象更改为nil,右边的bar按钮项目为nil,即使在实例化新的下拉列表并将其添加到右侧栏按钮项后,旧的下拉菜单仍然存在。
if(_picker){
// _picker.tableView.delegate = nil;
// _picker.tableView.dataSource = nil;
// _picker.delegate = nil;
self.navigationItem.rightBarButtonItem = nil;
// [_picker removeFromSuperview];
// _picker.view
}
_picker = [self.navigationItem addDropdownPickerWithOptions:[arr copy]];
_picker.delegate = self;
我还有一些功能,如果菜单变空,那么我会完全删除下拉列表,然后执行
if([api.myGroups count]==0){
self.navigationItem.rightBarButtonItem = nil;
return;
}
但是我的rightBarButtonItem保持不变。补充说明:如果有所不同,我也会使用AMSlideMenu,但实际上并不是这样。
答案 0 :(得分:0)
即使重新添加新的选择器,FSDDropdownPicker
仍然保留旧的tableView
仍然在视图层次结构中,因此请在添加新的选择器之前尝试调用[_picker removeFromSuperview];
。
此外,无需调用[self.view setNeedsDisplay];
和 nil 代理和数据源。似乎你只需要重新分配它。
此外,行self.navigationItem.rightBarButtonItem = _picker;
是多余的,因为addDropdownPickerWithOptions:
上的类别方法navigationItem
已将新创建的选择器分配给navigationItem
。
编辑:我的不好,你需要在创建新的选择器之前调用此代码:
for (UIView *view in self.navigationController.navigationBar.superview.subviews) {
if ([view isKindOfClass:[UITableView class]]) {
[view removeFromSuperview];
}
}
不幸的是,库本身并没有处理这个问题,所以你要么这样做,要么创建一个带有FSDDropdownPicker
库修复的拉取请求。
编辑编辑:
如果您没有使用CocoaPods,您可以尝试将表视图和options
定义放在头文件中 - 这不是一个很好的解决方案,但可能对您来说最简单。移动它
@property (strong, nonatomic) UITableView *tableView;
以及此@property (strong, nonatomic) NSArray *options;
行到FSDDropdownPicker.h
,每次要添加/删除项目时都不必创建新的选择器实例。只需在项目中添加/删除项目并重新加载表格视图。