0

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

当文本字段不为空时,我想隐藏右栏按钮项。使用下面显示的代码,当我在文本字段中输入文本时,它最初可以正常工作。但是,当我删除文本字段中的文本然后从弹出窗口返回时,应用程序崩溃,因为发现按钮项为零。我不明白为什么它是零。我在这里错过了什么吗?

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

1 回答 1

1

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

    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 委托方法中正确调用这些方法。

于 2020-07-12T05:49:21.440 回答