从弹出窗口返回时如何重置导航栏项目?

How can I reset navigation bar items when coming back from popup?

我有一个导航栏,其中有两个按钮作为右栏按钮项,标题视图中有一个文本字段。如果我点击文本字段,会弹出一个搜索屏幕,我可以在文本字段中输入文本。文本字段中的文本将在下面的代码中设置“resultText”变量。按钮项,包括filterItem和mapItem,与@IBOutlet连接良好

我想在文本字段不为空时隐藏右侧栏按钮项。使用下面显示的代码,当我在文本字段中输入文本时,它最初工作正常。但是,当我删除文本字段中的文本,然后从 pop-up 中删除 returns 时,应用程序崩溃,因为发现按钮项为零。我不明白为什么它是零。我在这里遗漏了什么吗?

if !resultText.isEmpty {
        navigationItem.rightBarButtonItem = nil
    } else {
        navigationItem.setRightBarButtonItems([filterItem, mapItem], animated: false)     
}

您要在导航栏中添加和删除按钮,它必须从视图中删除引用。尝试使用代码添加它 -

    func addBarButtonItems() {
        let filterItemBarButton = UIBarButtonItem(title: "filterItem", style: .plain, target: self, action: #selector(filterItemTapped))
        let mapItemBarButton = UIBarButtonItem(title: "mapItem", style: .plain, target: self, action: #selector(mapItemTapped))
        navigationItem.rightBarButtonItems = [filterItemTapped, mapItemTapped]
    }

    func removeBarButtonItems() {
        navigationItem.rightBarButtonItems = nil
    }
    
    @objc private func filterItemTapped() {
      //code
    }
    
    @objc private func mapItemTapped() {
      //code
    }

在 textField 委托方法中正确调用这些方法。