将导航项中的rightbarbuttonitem设置为nil不会消失

时间:2016-01-08 22:28:12

标签: ios drop-down-menu view uinavigationbar

我有一个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,但实际上并不是这样。

1 个答案:

答案 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,每次要添加/删除项目时都不必创建新的选择器实例。只需在项目中添加/删除项目并重新加载表格视图。