如何显示导航左栏按钮?
How to show Navigation Left bar button?
使用 Xcode 版本 9.3 开发 iOS 应用程序,Swift。
导航左栏按钮没有出现。你能告诉我如何显示左栏按钮吗?
当我用同样的代码尝试右边的按钮时,显示没有任何问题。
代码和故事板如下
第一个TableView的代码
import UIKit
class TableViewController: UITableViewController {
override func viewDidLoad() {
super.viewDidLoad()
let naviButton = UIBarButtonItem(title: "naviButton", style: UIBarButtonItemStyle.plain, target: self, action: #selector(Tapped))
// Left bar button does not appear
self.navigationItem.leftBarButtonItem = naviButton
// Right bar button do appear
self.navigationItem.rightBarButtonItem = naviButton
// Uncomment the following line to preserve selection between presentations
// self.clearsSelectionOnViewWillAppear = false
// Uncomment the following line to display an Edit button in the navigation bar for this view controller.
// self.navigationItem.rightBarButtonItem = self.editButtonItem
}
@objc func Tapped() {
print("Tapped")
}
...
故事板
模拟器
You can not place same button twice in UINavigationBar
. So create 2 separate button and then assign them to leftbarButton
and rightbarButton
:
override func viewDidLoad() {
super.viewDidLoad()
let leftNaviButton = UIBarButtonItem(title: "lNaviButton", style: UIBarButtonItemStyle.plain, target: self, action: #selector(Tapped1))
self.navigationItem.leftBarButtonItem = leftNaviButton
let rightNaviButton = UIBarButtonItem(title: "rNaviButton", style: UIBarButtonItemStyle.plain, target: self, action: #selector(Tapped2))
self.navigationItem.rightBarButtonItem = rightNaviButton
}
@objc func Tapped1() {
print("Tapped1")
}
@objc func Tapped2() {
print("Tapped2")
}
您不能将相同的视图添加到 UI 两次。如果您创建单个 UIBarButtonItem
,您可以将其添加为左侧导航项或右侧导航项,但不能同时添加。所以如果你想两边都有项目,只需创建另一个:
override func viewDidLoad() {
super.viewDidLoad()
let leftNaviButton = UIBarButtonItem(title: "naviButton", style: UIBarButtonItemStyle.plain, target: self, action: #selector(Tapped))
// Left bar button does not appear
self.navigationItem.leftBarButtonItem = leftNaviButton
let rightNaviButton = UIBarButtonItem(title: "naviButton", style: UIBarButtonItemStyle.plain, target: self, action: #selector(Tapped))
// Right bar button do appear
self.navigationItem.rightBarButtonItem = rightNaviButton
}
正如我在评论中建议的那样,您的问题与您为 self.navigationItem.rightBarButtonItem
和 self.navigationItem.leftBarButtonItem
设置相同 UIBarButtonItem
的事实有关,您需要创建两个 UIBarButtonItem
并分配一个给右边,另一个给左边,我想你知道该怎么做 ;)
您可以像这样为 UIButton 创建一个扩展
extension UIButton {
class func addBarButton(tittle:String,_ target: Any, action: Selector) -> UIBarButtonItem{
let button = UIButton(type: .system)
button.setTitle(tittle, for: .normal)
button.addTarget(target, action: action, for: .touchUpInside)
return UIBarButtonItem(customView: button)
}
}
而你的主控制器只需要写下面的代码
self.navigationItem.rightBarButtonItem = UIButton.addBarButton(tittle: "RNaviButton", self, action: #selector(Tapped1))
self.navigationItem.leftBarButtonItem = UIButton.addBarButton(tittle: "LNaviButton", self, action: #selector(Tapped2))
和按钮的操作方法
@objc func Tapped1() {
print("Tapped1")
}
@objc func Tapped2() {
print("Tapped2")
}
如果你想对两个按钮执行相同的操作,你也可以在两个按钮操作中传递相同的操作。
使用 Xcode 版本 9.3 开发 iOS 应用程序,Swift。
导航左栏按钮没有出现。你能告诉我如何显示左栏按钮吗?
当我用同样的代码尝试右边的按钮时,显示没有任何问题。
代码和故事板如下
第一个TableView的代码
import UIKit
class TableViewController: UITableViewController {
override func viewDidLoad() {
super.viewDidLoad()
let naviButton = UIBarButtonItem(title: "naviButton", style: UIBarButtonItemStyle.plain, target: self, action: #selector(Tapped))
// Left bar button does not appear
self.navigationItem.leftBarButtonItem = naviButton
// Right bar button do appear
self.navigationItem.rightBarButtonItem = naviButton
// Uncomment the following line to preserve selection between presentations
// self.clearsSelectionOnViewWillAppear = false
// Uncomment the following line to display an Edit button in the navigation bar for this view controller.
// self.navigationItem.rightBarButtonItem = self.editButtonItem
}
@objc func Tapped() {
print("Tapped")
}
...
故事板
模拟器
You can not place same button twice in
UINavigationBar
. So create 2 separate button and then assign them toleftbarButton
andrightbarButton
:
override func viewDidLoad() {
super.viewDidLoad()
let leftNaviButton = UIBarButtonItem(title: "lNaviButton", style: UIBarButtonItemStyle.plain, target: self, action: #selector(Tapped1))
self.navigationItem.leftBarButtonItem = leftNaviButton
let rightNaviButton = UIBarButtonItem(title: "rNaviButton", style: UIBarButtonItemStyle.plain, target: self, action: #selector(Tapped2))
self.navigationItem.rightBarButtonItem = rightNaviButton
}
@objc func Tapped1() {
print("Tapped1")
}
@objc func Tapped2() {
print("Tapped2")
}
您不能将相同的视图添加到 UI 两次。如果您创建单个 UIBarButtonItem
,您可以将其添加为左侧导航项或右侧导航项,但不能同时添加。所以如果你想两边都有项目,只需创建另一个:
override func viewDidLoad() {
super.viewDidLoad()
let leftNaviButton = UIBarButtonItem(title: "naviButton", style: UIBarButtonItemStyle.plain, target: self, action: #selector(Tapped))
// Left bar button does not appear
self.navigationItem.leftBarButtonItem = leftNaviButton
let rightNaviButton = UIBarButtonItem(title: "naviButton", style: UIBarButtonItemStyle.plain, target: self, action: #selector(Tapped))
// Right bar button do appear
self.navigationItem.rightBarButtonItem = rightNaviButton
}
正如我在评论中建议的那样,您的问题与您为 self.navigationItem.rightBarButtonItem
和 self.navigationItem.leftBarButtonItem
设置相同 UIBarButtonItem
的事实有关,您需要创建两个 UIBarButtonItem
并分配一个给右边,另一个给左边,我想你知道该怎么做 ;)
您可以像这样为 UIButton 创建一个扩展
extension UIButton {
class func addBarButton(tittle:String,_ target: Any, action: Selector) -> UIBarButtonItem{
let button = UIButton(type: .system)
button.setTitle(tittle, for: .normal)
button.addTarget(target, action: action, for: .touchUpInside)
return UIBarButtonItem(customView: button)
}
}
而你的主控制器只需要写下面的代码
self.navigationItem.rightBarButtonItem = UIButton.addBarButton(tittle: "RNaviButton", self, action: #selector(Tapped1))
self.navigationItem.leftBarButtonItem = UIButton.addBarButton(tittle: "LNaviButton", self, action: #selector(Tapped2))
和按钮的操作方法
@objc func Tapped1() {
print("Tapped1")
}
@objc func Tapped2() {
print("Tapped2")
}
如果你想对两个按钮执行相同的操作,你也可以在两个按钮操作中传递相同的操作。