UIBarButton 没有改变

Posted

技术标签:

【中文标题】UIBarButton 没有改变【英文标题】:UIBarButton not changing 【发布时间】:2015-01-08 00:54:09 【问题描述】:
@IBOutlet weak var playStopButton: UIBarButtonItem!
var playStopArray = [UIBarButtonSystemItem.Pause, UIBarButtonSystemItem.Play]
var index = 0

@IBOutlet weak var image: UIImageView!
@IBAction func playButton(sender: UIBarButtonItem) 
    println("pressed")
    playStopButton = UIBarButtonItem(barButtonSystemItem: playStopArray[index], target: self, action: "startMusic:")
    println("here")
    if index == 0 
        index = 1
    
    else 
        index = 0
    

func startMusic() 
    println("test")

我希望栏按钮更改为暂停符号,但没有运气。它同时打印“pressed”和“here”,但“test”不起作用。为什么图像没有变化?

【问题讨论】:

你在任何地方都调用 startMusic() 吗? 你去做作业的时候playStopButton是nil吗? 我不认为你的方法是正确的。您无需更改插座。您的 IBAction 发送一个 sender 参数。只需使用 sender.setTitle(_:forState: .Normal) 更改按钮上的文本。 我不想改变文字——我想让符号不同。 【参考方案1】:

你的方法是错误的。

在下面一行中,playStopButton = UIBarButtonItem(barButtonSystemItem: playStopArray[index], target: self, action: "startMusic:") 您实际上是在创建UIBarButtonItem 的新实例。此按钮实际上并未添加到视图中。而不是通过 Interface Builder 添加UIBarButtonItem。您可以通过编程方式创建它。

阅读此问题以获取更多信息。 toggle between UIBarButtonSystemItemPlay and UIBarButtonSystemItemPause

var playButton:UIBarButtonItem!
var pauseButton:UIBarButtonItem!

func setup()

    playButton = UIBarButtonItem(barButtonSystemItem: UIBarButtonSystemItem.Play, target: self, action: "startMusic:")
    pauseButton = UIBarButtonItem(barButtonSystemItem: UIBarButtonSystemItem.Pause, target: self, action: "stopMusic:")


func startMusic:(button : UIBarButtonItem)

     self.navigationItem.rightBarButtonItem = pauseButton // Switch to pause.
     //Other code.

func stopMusic:(button : UIBarButtonItem)

    self.navigationItem.rightBarButtonItem = playButton// Switch to play.
    //Other code.

【讨论】:

如何在 Swift 中做到这一点? 你有工具栏或导航栏吗? 出于好奇,我将如何为工具栏执行此操作? ***.com/questions/1078597/…【参考方案2】:

这是我在 Swift 中的方法

func configureBars() 
  isPlaying = false
  // UIToolbar
  let pickBarButtonItem = UIBarButtonItem(barButtonSystemItem: .Search,
    target: self,
    action: "pickSong")
  let playBarButtonItem = UIBarButtonItem(barButtonSystemItem: .Play,
    target: self,
    action: "playPause")
  let pauseBarButtonItem = UIBarButtonItem(barButtonSystemItem: .Pause,
    target: self,
    action: "playPause")
  let leftFlexBBI = UIBarButtonItem(barButtonSystemItem: .FlexibleSpace,
    target: nil,
    action: nil)
  let rightFlexBBI = UIBarButtonItem(barButtonSystemItem: .FlexibleSpace,
    target: nil,
    action: nil)
  playItems = [pickBarButtonItem, leftFlexBBI, playBarButtonItem, rightFlexBBI]
  pauseItems = [pickBarButtonItem, leftFlexBBI, pauseBarButtonItem, rightFlexBBI]

  toolbar.items = playItems

访问http://www.raywenderlich.com/36475/how-to-make-a-music-visualizer-in-ios 或者你可以查看我的 Github https://github.com/Charles-Hsu/MusicVisualizer

【讨论】:

以上是关于UIBarButton 没有改变的主要内容,如果未能解决你的问题,请参考以下文章

UIBarButton 未在 UINavigationBar 中显示

带有 CustomView 和边框的 UIBarButton

有没有办法改变 Button.addActionListener 的行为?

UIBarButton渲染问题

有没有办法改变按钮后面的背景颜色(button.setBackgroundResource)

UIBarButton上的点击事件怎么做