2015-03-28 6 views
2

Я пытаюсь изменить кнопку значка кнопки PLAY на PAUSE, когда я нажимаю на нее. Но мой код не работает.Изменение значка кнопки панели навигации в Swift

Это мой код @IBAction.

@IBAction func playTimer(sender: AnyObject) { 

    if buttonSwitch == 0 { 
     timer = NSTimer.scheduledTimerWithTimeInterval(1, target: self, selector: Selector("result"), userInfo: nil, repeats: true) 
     buttonSwitch = 1 

     self.navigationItem.setLeftBarButtonItem(UIBarButtonItem(barButtonSystemItem: .Pause, target: self, action: "setAlarm"), animated: true) 

     println("2") 

    } else { 
     timer.invalidate() 
     buttonSwitch = 0 
    } 

} 

Я пробовал все, но ничего не происходит. Нет ошибок, и значок не изменяется.

+0

перейдите по этой ссылке, это может помочь вам https://coderwall.com/p/dyqrfa/customize-navigation-bar-appearance-with-swift –

+0

https://developer.apple.com/library/prerelease/ ios/documentation/UIKit/Reference/UIToolbar_Class/index.html # // apple_ref/occ/instm/UIToolbar/setItems: анимированный –

+0

Является ли для NAV BAR не для панели инструментов. Благодарю. – user3091828

ответ

0

Когда вы говорите, что ничего не случилось, я предполагаю, что даже ваш println не показывает. В этом случае убедитесь, что buttonSwitch изначально установлен в 0. Если это не разрешило его, поместите разрыв в первую строку функции IBAction и посмотрите, вызвана ли она при нажатии кнопки. Если нет, есть проблемы с вашей розеткой. Если это так, и println работает, тогда возникает проблема с вашей ссылкой navigationItem. В вашем коде вы переключаетесь с игры на паузу, но вам нужно поместить обратный код в оператор else для возврата (если это то, что вы хотите).

+0

Хорошо. Вот мой ответ: buttonSwitch первоначально установлен в 0 - Да Println показывает - Да кнопка работает правильно Единственное, что не работает это код значок изменения. Я думаю, что, вероятно, что-то связано с ссылкой navigationItem. Как я могу сделать эту ссылку? Код в порядке? Спасибо. – user3091828

0
// Use as it iss in you code for swift 
UIImage* image3 = [UIImage imageNamed:@"appbar.refresh.png"]; 
     CGRect frameimg = CGRectMake(-10, 0, 30, 30); 
     UIButton *someButton = [[UIButton alloc] initWithFrame:frameimg]; 
     [someButton setBackgroundImage:image3 forState:UIControlStateNormal]; 
     [someButton addTarget:self action:@selector(RefresInformation:)forControlEvents:UIControlEventTouchUpInside]; 
     [someButton setShowsTouchWhenHighlighted:YES]; 
     UIImage* image4 = [UIImage imageNamed:@"appbar.save.png"]; 
     CGRect frameimg4 = CGRectMake(0, 0, 30, 30); 
     UIButton *someButton4 = [[UIButton alloc] initWithFrame:frameimg4]; 
     [someButton4 setBackgroundImage:image4 forState:UIControlStateNormal]; 
     [someButton4 addTarget:self action:@selector(SaveNewProjectRecord:)forControlEvents:UIControlEventTouchUpInside]; 
     [someButton setShowsTouchWhenHighlighted:YES]; 
     UIImage* image5 = [UIImage imageNamed:@"appbar.close.png"]; 
     UIButton *someButton5 = [[UIButton alloc] initWithFrame:frameimg4]; 
     [someButton5 setBackgroundImage:image5 forState:UIControlStateNormal]; 
     [someButton5 addTarget:self action:@selector(CancelTransaction:)forControlEvents:UIControlEventTouchUpInside]; 
     [someButton5 setShowsTouchWhenHighlighted:YES]; 
     UIBarButtonItem *mailbutton =[[UIBarButtonItem alloc] initWithCustomView:someButton]; 
     UIBarButtonItem *mailbutton4=[[UIBarButtonItem alloc] initWithCustomView:someButton4]; 
     UIBarButtonItem *mailbutton5=[[UIBarButtonItem alloc] initWithCustomView:someButton5]; 
     self.navigationItem.rightBarButtonItems=[[NSArray alloc] initWithObjects:mailbutton5,mailbutton, mailbutton4, nil]; 
+0

Этот код не работает. Я попытался включить мой проект Swift, и есть много ошибок. Я вижу даже некоторые предложения из объектива-с, а не Свифта. Но спасибо за попытку чувака. – user3091828

0

Вот рабочий код, Im угадывание вы забыли ":" на действии ... может быть ...

import UIKit 


class ViewController: UIViewController { 

    var buttonSwitch : Int! 
    var timer : NSTimer! 
    override func viewDidLoad() { 
     super.viewDidLoad() 
     buttonSwitch = 0; 
     self.navigationItem.setLeftBarButtonItem(UIBarButtonItem(barButtonSystemItem: .Play, target: self, action: "playTimer:"), animated: true) 


    } 

    @IBAction func playTimer(sender: AnyObject) { 
     if buttonSwitch == 0 { 
      timer = NSTimer.scheduledTimerWithTimeInterval(1, target: self, selector: Selector("result"), userInfo: nil, repeats: true) 
      buttonSwitch = 1 
      self.navigationItem.setLeftBarButtonItem(UIBarButtonItem(barButtonSystemItem: .Pause, target: self, action: "playTimer:"), animated: true) 

      println("2") 

     } else { 
      self.navigationItem.setLeftBarButtonItem(UIBarButtonItem(barButtonSystemItem: .Play, target: self, action: "playTimer:"), animated: true) 
      timer.invalidate() 
      buttonSwitch = 0 
     } 
    } 
    override func didReceiveMemoryWarning() { 
     super.didReceiveMemoryWarning() 
     // Dispose of any resources that can be recreated. 
    } 


} 
+0

Извините. Я скопировал и вставил один и тот же код, и он работает, но значок не изменился :(Есть ли какие-либо варианты, чтобы показать вам? Скриншот общего доступа к Skype? Hangout? Спасибо. – user3091828

+0

Что вы имеете в виду, но это не работает изменить значок? Что работало? – Vincent

+0

Что я ищу, когда вы нажимаете кнопку «Воспроизведение», она должна меняться на паузу.И если вы нажмете еще раз, это должно измениться для кнопки Play. Часы работают, но кнопка воспроизведения не изменяется. – user3091828

2
//oh sorry! previously i had given Objective c code..., 

var imageCheckUI:UIImage = UIImage(named: "checkmark-25.png")! 
     var rectCheckFram : CGRect = CGRectMake(-10, 0, 20, 20) 
     var BtnCheckUI : UIButton = UIButton(frame: rectCheckFram) 
     BtnCheckUI .setBackgroundImage(imageCheckUI, forState: UIControlState.Normal) 
     BtnCheckUI.addTarget(self, action: "Correctdata", forControlEvents:.TouchUpInside) 


     imageCheckUI = UIImage(named: "appbar.close.png")! 
     rectCheckFram = CGRectMake(-10, 0, 30, 30) 
     var BtnCloseUI : UIButton = UIButton(frame: rectCheckFram) 
     BtnCloseUI .setBackgroundImage(imageCheckUI, forState: UIControlState.Normal) 
     BtnCloseUI.addTarget(self, action: "close", forControlEvents:.TouchUpInside) 
     let barbtncheck: UIBarButtonItem = UIBarButtonItem(customView: BtnCheckUI) 
     var barbtnRIght :UIBarButtonItem = UIBarButtonItem(customView: BtnCloseUI) 
     let array:NSArray = NSArray(objects: barbtncheck,barbtnRIght) 
     self.navigationItem.setRightBarButtonItems(array, animated: true) 
0

Вот простой код. Запуск Xcode 6.3 Этот код НЕ изменяет идентификатор кнопки. Программа установки - это один контроллер просмотра. Пункт «Панель навигации», один элемент «Панель кнопок» в левой части панели. Свяжите элемент панели кнопок с IBAction «playTimer».

import UIKit 

class ViewController: UIViewController { 

    var buttonSwitch : Int! 
    var timer : NSTimer! 
    override func viewDidLoad() { 
     super.viewDidLoad() 
     buttonSwitch = 0; 
     self.navigationItem.setLeftBarButtonItem(UIBarButtonItem(barButtonSystemItem: .Play, target: self, action: "playTimer:"), animated: true) 
    } 

    @IBAction func playTimer(sender: AnyObject) { 

     if buttonSwitch == 0 { 
      println("buttonSwitch = 0") 
      buttonSwitch = 1 
      self.navigationItem.setLeftBarButtonItem(UIBarButtonItem(barButtonSystemItem: .Pause, target: self, action: "playTimer:"), animated: true) 

     } else { 
      println("buttonSwitch = 1") 
      self.navigationItem.setLeftBarButtonItem(UIBarButtonItem(barButtonSystemItem: .Play, target: self, action: "playTimer:"), animated: true) 
      buttonSwitch = 0 
     } 
    } 


    override func didReceiveMemoryWarning() { 
     super.didReceiveMemoryWarning() 
     // Dispose of any resources that can be recreated. 
    } 


} 

Несколько сообщений на этом форуме заявили, чтобы решить вопрос об изменении идентификатора кнопки элемента с этим или подобным кодом, но я и другие, которые пытаются найти этот код, что он работает, но идентификатор кнопки не меняется. Два оператора println() чередуются и отображаются как ожидалось, но кнопка не изменяется. Не в viewDidLoad, а не в playTimer.

ПОЖАЛУЙСТА: Перед тем, как модератор удалит этот «Ответ», как не ответ, считайте, что это очищенный пример ответа вышеперечисленных и предположительно должен работать. Этот вопрос появляется, по крайней мере, в пяти сообщениях на этом форуме, но не один содержит ответ, который выполняет. Пожалуйста, подумайте над тем, чтобы этот «ответ» стоял в надежде, что кто-то умный сможет взять этот код и изменить его, чтобы изменить идентификатор кнопки.

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