繁体   English   中英

无法将NSMutableArray类型的值分配给UIBarButtonItem类型

[英]Cannot assign value of type NSMutableArray to type UIBarButtonItem

我正在开发一个iOS音频应用程序作为一个学习项目。 我在其中一个功能中遇到问题,该功能可以检查播放器是在播放还是在暂停/停止。 如果正在播放,则应将按钮栏中的按钮更改为“暂停”按钮,或者如果已暂停或停止,则将其更改为“播放”按钮。 我将按钮栏项目作为NSMutableArray分配给变量“ items”,然后对按钮进行必要的更改,然后将“ items”分配回按钮栏项目以更新显示。

在我的代码中,我在网上遇到了一个错误:

self.toolbar.items = items

错误消息是

无法将类型NSMutableArray的值分配给类型UIBarButtonItem

我假设我需要转换NSMutableArray,我尝试使用Array,但当我这样做时错误消失了,但是按钮坏了。

我的代码的相关部分是:

@IBOutlet weak var toolbar: UIToolbar!

@IBOutlet var playButton: UIBarButtonItem!


@IBAction func playPausePressed(sender: AnyObject) {
    let playbackState = self.player.playbackState as MPMusicPlaybackState
    let items = NSMutableArray(array: self.toolbar.items!)
    if playbackState == .Stopped || playbackState == .Paused{
        self.player.play()
        items[2] = self.pauseButton
    } else if playbackState == .Playing{
        self.player.pause()
        items[2] = self.playButton
    }
    self.toolbar.items = items
}

任何帮助或指示将不胜感激。 谢谢!

发生错误是因为NSMutableArray与Swift Array无关

为什么不直接使用本机属性? 由于引用语义,因此不必创建临时数组。

@IBAction func playPausePressed(sender: AnyObject) {
    let playbackState = self.player.playbackState as MPMusicPlaybackState
    var items = self.toolbar.items!
    if playbackState == .Stopped || playbackState == .Paused{
        self.player.play()
        items[2] = self.pauseButton
    } else if playbackState == .Playing{
        self.player.pause()
        items[2] = self.playButton
    }
}

我觉得您可以做得更好。 您是否真的需要在两个不同的按钮之间进行切换items[2]

UIBarButtonItem可以像具有不同状态的常规UIButton使用。 我假设您想在播放器暂停/播放时在播放和暂停图像之间切换。 您可以通过在UIBarButtonItem( setBackgroundImage(_:forState:barMetrics:) )中设置两个不同的图像,然后在playbackState更改时设置适当的状态来执行此操作。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM