【问题标题】:How to use UIBarButtonSystemItem to change UIBarButtonItem identifier? (Swift)如何使用 UIBarButtonSystemItem 更改 UIBarButtonItem 标识符? (迅速)
【发布时间】:2019-06-30 04:08:09
【问题描述】:

我想将带有代码的 UIBarButtonItem 的标识符从“播放”更改为“暂停”。我该怎么做?

谢谢

【问题讨论】:

标签: xcode swift uibarbuttonitem


【解决方案1】:

1) 初始化一个新按钮

//change to play
let button = UIBarButtonItem(barButtonSystemItem: UIBarButtonSystemItem.Play, target: self, action: "someAction")
navigationBar.topItem.leftBarButtonItem = button

//change to pause
let button = UIBarButtonItem(barButtonSystemItem: UIBarButtonSystemItem.Pause, target: self, action: "someOtherAction")
navigationBar.topItem.leftBarButtonItem = button

2) 只需更改文本:

navigationBar.topItem?.leftBarButtonItem?.title = "AnyText"

如果您在访问导航栏时也遇到问题,最好只为其设置一些标签(我喜欢对特定视图*使用否定标签,以确保 2 个视图*不会获得相同的标签) . 然后你可以这样做:

let navigationBar = (self.view.viewWithTag(-1) as UINavigationBar)
navigationBar.topItem?.leftBarButtonItem?.title = "AnyText"

【讨论】:

    【解决方案2】:

    我用这段代码来切换编辑模式

    @IBAction func editMode(sender: UIBarButtonItem) {
        self.setEditing(!self.isEditing, animated: true)
    
        let newButton = UIBarButtonItem(barButtonSystemItem: (self.isEditing) ? .done : .edit, target: self, action: #selector(editMode(sender:)))
        self.navigationItem.setLeftBarButton(newButton, animated: true)
    }
    

    【讨论】:

      【解决方案3】:

      对于工具栏项,这里是示例代码。

      var player:AVAudioPlayer = AVAudioPlayer()
      
      @IBOutlet var toolbar: UIToolbar!
      @IBOutlet var playPauseButton: UIBarButtonItem!
      
      @IBAction func playPause(sender: AnyObject) {
      
          if player.playing {
      
              player.pause()
      
              playPauseButton = UIBarButtonItem(barButtonSystemItem: UIBarButtonSystemItem.Play, target: self, action: "playPause:")
      
              toolbar.items![0] = playPauseButton //apply for first toolbar item
      
          } else {
      
              player.play()
      
              playPauseButton = UIBarButtonItem(barButtonSystemItem: UIBarButtonSystemItem.Pause, target: self, action: "playPause:")
      
              toolbar.items![0] = playPauseButton //apply for first toolbar item
      
      
          }
      
      }
      

      【讨论】:

      • 如果我们将项目注入到工具栏中,我们不需要 playPauseButton 出口引用。
      【解决方案4】:

      此代码已经过测试,可与 Swift 2 一起使用

      @IBOutlet weak var navigationBar: UINavigationBar!
      
      //playToPause()
      @IBAction func playButton(sender: UIBarButtonItem) {
      
          let newBarButton = UIBarButtonItem(barButtonSystemItem: UIBarButtonSystemItem.Pause, target: self, action: "pauseButton:")
          navigationBar.topItem?.rightBarButtonItem = newBarButton
      }
      
      // pauseToPlay()
      @IBAction func pauseButton(sender: UIBarButtonItem){
      
          let pauseBtnItem = UIBarButtonItem(barButtonSystemItem: UIBarButtonSystemItem.Play, target: self, action: "playButton:")
          navigationBar.topItem!.rightBarButtonItem = pauseBtnItem
      }
      

      【讨论】:

        【解决方案5】:

        我看到了几个线程,这是唯一真正符合我要求的答案。我唯一的问题是它把我的工具栏项目移到了最左边,而且我把它放在了中心。如果您的按钮以灵活的空格键居中,或者它不是第一个按钮,只需像这样更改索引: toolbar.items![1] = playPauseButton //apply for second toolbar item

        【讨论】:

          猜你喜欢
          • 2011-12-30
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 2015-04-23
          • 1970-01-01
          相关资源
          最近更新 更多