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



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

当文本字段不为空时,我想隐藏右侧栏按钮项目。使用下面显示的代码,当我在文本字段中输入文本时,它最初工作得很好。然而,当我删除文本字段中的文本,然后从弹出窗口返回时,应用程序崩溃,因为按钮项目为零。我不明白为什么是零。我是不是遗漏了什么?

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

最新更新