UIToolBar 栏按钮项目未使用 Swift 显示

Posted

技术标签:

【中文标题】UIToolBar 栏按钮项目未使用 Swift 显示【英文标题】:UIToolBar bar button items NOT showing with Swift 【发布时间】:2016-07-02 21:34:06 【问题描述】:

我在不使用 Interface Builder 的情况下制作应用程序,所以我通过代码创建所有内容。

我有一个嵌入在导航控制器中的视图控制器。我知道导航控制器有一个工具栏属性,我需要做的就是将布尔值设置为 false 以取消隐藏它。我的代码是这样的(它是在 viewDidLoad 中调用的函数):

func setUpToolBar()
    navigationController?.toolbarHidden = false
    navigationController?.toolbar.barTintColor = UIColor.blackColor()
    navigationController?.toolbar.tintColor = UIColor.whiteColor()

    toolItems.append(addImageButton)
    toolItems.append(UIBarButtonItem(barButtonSystemItem: .FlexibleSpace, target: self, action: nil))
    toolItems.append(exportImageButton)
    toolItems.append(UIBarButtonItem(barButtonSystemItem: .FlexibleSpace, target: self, action: nil))
    toolItems.append(deleteImageButton)

    navigationController?.toolbar.setItems(toolItems, animated: false)


这里是我在哪里以及如何为我的视图控制器声明这些属性:

private var addImageButton : UIBarButtonItem = 
    let button = UIFactory.createBarButtonItem(nil, imageNamed: "plus button", style: .Plain, target: ImagesCollectionViewController.self, selector: #selector(ImagesCollectionViewController.addImage))
    return button
()
private var exportImageButton : UIBarButtonItem = 
    let button = UIFactory.createBarButtonItem(nil, imageNamed: "export button", style: .Plain, target: ImagesCollectionViewController.self, selector: #selector(ImagesCollectionViewController.exportImagePressed))
    return button
()
private var deleteImageButton : UIBarButtonItem = 
    let button = UIFactory.createBarButtonItem(nil, imageNamed: "trash button", style: .Plain, target: ImagesCollectionViewController.self, selector: #selector(ImagesCollectionViewController.deleteImagePressed))
    return button
()

private var toolItems : [UIBarButtonItem] = []

这是我的 UIFactory 类的函数,它简单地处理在视图控制器之外创建这些 UI 项的麻烦

class func createBarButtonItem(title: String?, imageNamed : String?, style : UIBarButtonItemStyle?, target : AnyObject?, selector : Selector?) -> UIBarButtonItem
    let button = UIBarButtonItem()
    if let theTitle = title 
        button.title = theTitle
    
    if let theImageName = imageNamed 
        button.image = UIImage(named: theImageName)
    
    if let theStyle = style
        button.style = theStyle
    
    if let theTarget = target 
        button.target = theTarget
    
    if let theSelector = selector 
        button.action = theSelector
    
    return button

而且,在模拟器中运行这段代码后,我看到的是这个(没有工具栏项目!另外,请注意我在导航栏中有一个栏按钮项目,我在代码中添加了它就好了)

请有人帮助我。我被困在这样一个荒谬的步骤上,没有这个我就无法继续我的应用程序。

【问题讨论】:

你在哪里调用 setupToolbar? 在 ViewDidLoad 中调用 这可能为时过早。如果navigationController? 仍然为零,那么您的代码将没有任何效果。是零吗?如果是这样,请尝试将呼叫转移到 setupToolbarviewWillAppear 或类似的地方。 难以置信。有效。谢谢! toolItems需要初始化吗? 【参考方案1】:

删除

navigationController?.toolbar.setItems(toolItems, animated: false)

并把这行代码

self.toolbarItems = [toolItems]

【讨论】:

这对我有用,想知道为什么“self.navigationController?.toolbar.items = items”和“self.navigationController?.setToolbarItems(items, animated: false)”不起作用【参考方案2】:

我变了

navigationController!.toolbar.setItems(toolItems, animated: true)

toolbarItems = toolItems

为我工作。

【讨论】:

以上是关于UIToolBar 栏按钮项目未使用 Swift 显示的主要内容,如果未能解决你的问题,请参考以下文章

无法使用白色按钮项色调使 UIToolBar 变为黑色(ios 9,Swift)

Swift - UIPickerView 的带有完成按钮的 UIToolbar 在横向上消失

在 UIToolBar 上居中按钮

无法将项目添加到 UIToolbar

iPhone X 模拟器上的 UIToolBar 位置

出现取消按钮,但完成按钮未出现在 uitoolbar 中