从弹出窗口返回时如何重置导航栏项目?
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 委托方法中正确调用这些方法。
我有一个导航栏,其中有两个按钮作为右栏按钮项,标题视图中有一个文本字段。如果我点击文本字段,会弹出一个搜索屏幕,我可以在文本字段中输入文本。文本字段中的文本将在下面的代码中设置“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 委托方法中正确调用这些方法。