2015-01-08 3 views
2
@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") 
} 

Я ожидал, что кнопка бара изменится на символ паузы, но без везения. Он печатает как «нажатые», так и «здесь», но «тест» не работает. Почему изображение не меняется?UIBarButton не меняется

+0

Вы называете startMusic() где-нибудь? – ad121

+0

Является ли playStopButton нил, когда вы идете выполнить задание? – jsd

+0

Я не думаю, что ваш подход прямо здесь. Вам не нужно менять розетку. Ваш IBAction отправляет параметр отправителя. Просто используйте sender.setTitle (_: forState: .Normal), чтобы изменить текст на кнопке. – ad121

ответ

3

Ваш подход неверен.

В следующей строке
playStopButton = UIBarButtonItem(barButtonSystemItem: playStopArray[index], target: self, action: "startMusic:")
вы фактически создаете новый экземпляр UIBarButtonItem. Эта кнопка фактически не добавляется в представление. Вместо добавления UIBarButtonItem через Interface Builder. Вы можете создать его программно.

Прочтите этот вопрос для получения дополнительной информации. 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. 
} 
+0

Как бы это сделать в Swift? – brimstone

+0

У вас есть панель инструментов или панель навигации? – rakeshbs

+0

панель навигации. – brimstone

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

Смежные вопросы