簡體   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