无法将 NSMutableArray 类型的值分配给 UIBarButtonItem 类型
Posted
技术标签:
【中文标题】无法将 NSMutableArray 类型的值分配给 UIBarButtonItem 类型【英文标题】:Cannot assign value of type NSMutableArray to type UIBarButtonItem 【发布时间】:2016-01-05 22:28:58 【问题描述】:我正在开发一个 ios 音频应用程序作为学习项目。我在其中一项功能中遇到问题,该功能检查播放器是否正在播放或暂停/停止。如果它正在播放,则应将按钮栏中的按钮更改为“暂停”按钮,或者如果它已暂停或停止,请将按钮更改为“播放”按钮。我将按钮栏项目作为 NSMutableArray 分配给变量“项目”,然后对按钮进行必要的更改,然后将“项目”分配回按钮栏项目以更新显示。
在我的代码中,我遇到了一个错误:
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
任何帮助或指导将不胜感激。 谢谢!
【问题讨论】:
playButton 是在 Storyboard 编辑器中创建的。 pauseButton 被声明为 ViewController 类中的一个变量,var pauseButton: UIBarButtonItem! 【参考方案1】:出现错误是因为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
【讨论】:
这种方法对我有用,谢谢!我添加了一些代码来设置系统项属性,之后效果很好!【参考方案2】:我觉得你可以做得更好。您真的需要在items[2]
的两个不同按钮之间切换吗?
UIBarButtonItem
可以像普通的UIButton
一样使用不同的状态。我假设您想在播放器暂停/播放时在播放和暂停图像之间切换。您可以通过为您的 UIBarButtonItem (setBackgroundImage(_:forState:barMetrics:)
) 设置两个不同的图像然后在您的播放状态更改时设置适当的状态来做到这一点。
【讨论】:
这种方法对我有用,唯一的缺点是使用带有两个而不是一个按钮的房地产。但它确实让我对这个功能大开眼界,谢谢!以上是关于无法将 NSMutableArray 类型的值分配给 UIBarButtonItem 类型的主要内容,如果未能解决你的问题,请参考以下文章
无法将类型“[PHAsset]”的值分配给类型“UIImageView!”