将导航项中的 rightbarbuttonitem 设置为 nil 不会消失
setting rightbarbuttonitem in navigation item to nil doesn't disappear
我有一个带有 class FSDDropdownPicker(下拉菜单)的对象,我想编辑下拉菜单中的一个条目。这样做后,我将对象更改为 nil,并将右栏按钮项更改为 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。
即使在 re-adding 新选择器之后,FSDDropdownPicker
仍将旧的 tableView
保留在视图层次结构中,因此请尝试在添加新选择器之前调用 [_picker removeFromSuperview];
。
此外,无需调用 [self.view setNeedsDisplay];
和 nil 委托和数据源。看来你只需要重新分配它。
此外,self.navigationItem.rightBarButtonItem = _picker;
行是多余的,因为 navigationItem
上的类别方法 addDropdownPickerWithOptions:
已经将新创建的选择器分配给 navigationItem
。
编辑:糟糕,您需要在创建新选择器之前调用此代码:
for (UIView *view in self.navigationController.navigationBar.superview.subviews) {
if ([view isKindOfClass:[UITableView class]]) {
[view removeFromSuperview];
}
}
不幸的是,库本身并没有处理这个问题,所以你要么这样做,要么创建一个 pull request 来修复 FSDDropdownPicker
库。
编辑编辑:
如果您不使用 CocoaPods,您可以尝试将 table 视图和 options
定义放在头文件中 - 这不是一个很好的解决方案,但现在对您来说可能是最简单的。移动这个
@property (strong, nonatomic) UITableView *tableView;
和此 @property (strong, nonatomic) NSArray *options;
行到 FSDDropdownPicker.h
并且您不必每次想要 add/delete 一个项目时都创建新的选择器实例。只需 add/delete 一个项目到选项并重新加载 table 视图。
我有一个带有 class FSDDropdownPicker(下拉菜单)的对象,我想编辑下拉菜单中的一个条目。这样做后,我将对象更改为 nil,并将右栏按钮项更改为 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。
即使在 re-adding 新选择器之后,FSDDropdownPicker
仍将旧的 tableView
保留在视图层次结构中,因此请尝试在添加新选择器之前调用 [_picker removeFromSuperview];
。
此外,无需调用 [self.view setNeedsDisplay];
和 nil 委托和数据源。看来你只需要重新分配它。
此外,self.navigationItem.rightBarButtonItem = _picker;
行是多余的,因为 navigationItem
上的类别方法 addDropdownPickerWithOptions:
已经将新创建的选择器分配给 navigationItem
。
编辑:糟糕,您需要在创建新选择器之前调用此代码:
for (UIView *view in self.navigationController.navigationBar.superview.subviews) {
if ([view isKindOfClass:[UITableView class]]) {
[view removeFromSuperview];
}
}
不幸的是,库本身并没有处理这个问题,所以你要么这样做,要么创建一个 pull request 来修复 FSDDropdownPicker
库。
编辑编辑:
如果您不使用 CocoaPods,您可以尝试将 table 视图和 options
定义放在头文件中 - 这不是一个很好的解决方案,但现在对您来说可能是最简单的。移动这个
@property (strong, nonatomic) UITableView *tableView;
和此 @property (strong, nonatomic) NSArray *options;
行到 FSDDropdownPicker.h
并且您不必每次想要 add/delete 一个项目时都创建新的选择器实例。只需 add/delete 一个项目到选项并重新加载 table 视图。