Swift 3.0向导航栏添加右键

问题描述 投票:16回答:6

我在视图控制器的顶部添加了一个导航栏。我试图根据条件控制按钮是否可见,但是我在添加按钮时遇到问题。到目前为止,我有,

var addButton: UIBarButtonItem = UIBarButtonItem(title: "test", style: .done, target: self, action: #selector(addTapped))

override func viewDidLoad() {
    super.viewDidLoad()

    let boool = true
    if boool {
        self.navigationItem.rightBarButtonItem = self.addButton
    }
    else {
        self.navigationItem.rightBarButtonItem = nil
    }
}

func addTapped(sender: AnyObject) {
    print("hjxdbsdhjbv")
}

我认为它没有正常工作,因为我已经在VC中添加了导航栏,而不是使用导航控制器并在那里使用栏。我想知道是否有办法使用此导航栏。

ios swift button navigationbar
6个回答
5
投票

您说您通过故事板向视图控制器添加了UINavigationBar,但查看您提供的代码,IB中的导航栏没有插座连接。

为了访问self.navigationItem,您的视图控制器必须嵌入到UINavigationController中或者是层次结构的一部分。除非您需要在单个视图控制器上使用自定义导航栏,否则我建议从Interface Builder中删除它,然后确保所讨论的视图控制器嵌入在UINavigationController中,或者将其从另一个控制器推送到导航堆栈它嵌入在导航控制器中然后你应该看到你的UIBarButtonItem


41
投票

这很简单。把这行代码放到viewDidLoad

self.navigationItem.rightBarButtonItem = UIBarButtonItem(title: "test", style: .done, target: self, action: #selector(addTapped))

更新为Swift 4或更高版本:

自定义功能:

@objc func action(sender: UIBarButtonItem) {
    // Function body goes here
}

(自定义)右栏按钮项:

self.navigationItem.rightBarButtonItem = UIBarButtonItem.init(title: "some_text", style: .done, target: self, action: #selector(self.action(sender:)))

(自定义)左栏按钮项:

self.navigationItem.leftBarButtonItem = UIBarButtonItem.init(title: "some_text", style: .done, target: self, action: #selector(self.action(sender:)))

您还可以添加系统栏按钮项,如下所示:UIBarButtonItem.SystemItem为条形按钮项定义系统提供的图像:.add,.done,.cancel,.edit,.save,.compose,.reply,.organize等。

(系统)右栏按钮项:

self.navigationItem.rightBarButtonItem = UIBarButtonItem.init(barButtonSystemItem: UIBarButtonItem.SystemItem.add, target: self, action: #selector(self.action(sender:)))

(系统)左栏按钮项:

self.navigationItem.leftBarButtonItem = UIBarButtonItem.init(barButtonSystemItem: UIBarButtonItem.SystemItem.add, target: self, action: #selector(self.action(sender:)))

7
投票
let rightBarButtonItem = UIBarButtonItem.init(image: UIImage(named: "EditImage"), style: .done, target: self, action: #selector(ViewController.call_Method))

self.navigationItem.rightBarButtonItem = rightBarButtonItem

1
投票

首先,您需要将导航栏连接到IBOutlet,以便您可以在代码中引用它。之后,此代码应该工作:

    let navigationItem = UINavigationItem(title: "Title")
    navigationItem.rightBarButtonItem = self.addButton
    navigationItem.hidesBackButton = true
    self.navigationBar.pushItem(navigationItem, animated: false)

1
投票

Swift 4.2;

添加viewController

override func viewDidLoad() {
        super.viewDidLoad()
        self.addNavigationBarButton(imageName: "ic_back", direction:.left)
 }

添加Class您的API或实用工具类

public func addNavigationBarButton(imageName:String,direction:direction){
    var image = UIImage(named: imageName)
    image = image?.withRenderingMode(.alwaysOriginal)
    switch direction {
    case .left:
        self.navigationItem.leftBarButtonItem = UIBarButtonItem(image: image, style:.plain, target: nil, action: #selector(goBack))
    case .right:
        self.navigationItem.rightBarButtonItem = UIBarButtonItem(image: image, style:.plain, target: nil, action: #selector(goBack))
    }
}

@objc public func goBack() {
    self.navigationController?.popViewController(animated: true)
}

public enum direction {
    case right
    case left
}

0
投票

在Xcode 10.2中测试,swift 5.0;首先,我已经在IB中的UINavigationController中嵌入了我的ViewController。然后在ViewDidLoad中包含这些行

self.title = "orange"
 self.navigationItem.rightBarButtonItem = UIBarButtonItem(barButtonSystemItem: .add, target: self, action: #selector(changeLayout)).

注意 - 访问标题或通过导航控制器添加按钮不起作用。例如:设置标题 - Self.navigationcontroller.navigationItem.title不起作用,

© www.soinside.com 2019 - 2024. All rights reserved.