2015-08-17 2 views
0

Я положил несколько кнопок в игру на SpriteKit, используя Xcode 7 Beta, они остаются все время видимыми, и я хотел сделать их невидимыми, когда игра запущена и видна, когда игра окончена. Я пытался с Bool, но это не сработает, потому что они находятся в разных файлах (классах). Функция запуска игры и ее завершения - в GameScene.swift, а функции кнопок - в GameViewController.swift.Как сделать кнопки невидимыми с быстрым кодом на Xcode 7?

код, который я использовал игру для начала:

var isStarted = false 


func start() { 
    isStarted = true 
} 

override func touchesBegan(touches: Set<UITouch>, withEvent event: UIEvent?) { 
    if isGameOver { 
     restart() 
    } else !isStarted { 
     start() 

Так что игра начинается с нажатием на экран.

код, который я использовал игру за кадром является:

var isGameOver = false 

func gameOver() { 
    isGameOver = true 
} 

и кнопки в GameViewController.swift в качестве отправителя: UIButton.

@IBAction func facebookShare(sender: UIButton){ 
    let facebookShare : SLComposeViewController = SLComposeViewController(forServiceType: SLServiceTypeFacebook) 
    self.presentViewController(facebookShare, animated: true, completion: nil) 
} 



@IBAction func twitterShare(sender: UIButton) { 
    let twitterShare : SLComposeViewController = SLComposeViewController(forServiceType: SLServiceTypeTwitter) 
    self.presentViewController(twitterShare, animated: true, completion: nil) 
} 



@IBAction func leaderboard(sender: UIButton) { 

} 



@IBAction func removeAds(sender: UIButton) { 

} 

Как видите, я еще не закончил еще две кнопки, так или иначе, после этого.
Я надеюсь, что Вам будет полезно, потому что я новичок

+0

Что точно вы хотите? Вы хотите скрыть свойство Button thats UIView другого класса? Потому что вы можете скрыть кнопку типа yourButton.hidden = true –

+0

Невозможно скрыть ее, поэтому я попробовал, func start() { isStarted = true facebookShare.hidden = true } но не сработает! – Emm

+0

Ну, я думаю, я понимаю вашу проблему, я напишу вам короткий ответ и надеюсь, что я понимаю вас правильно –

ответ

1

Хорошо, ниже вы найдете способ, как послать событие любому объекту, который слушает к нему ....

class ClassWithButtonsInIt: UIViewController { 
    @IBOutlet weak var buttonOne: UIButton! 
    @IBOutlet weak var buttonTwo: UIButton! 
    @IBOutlet weak var buttonThree: UIButton! 

    override func viewDidLoad() { 
     super.viewDidLoad() 

     NSNotificationCenter.defaultCenter().addObserver(self, selector: Selector("hideButtonsEvent"), name: "hideButtonsEvent", object: nil) 
    } 

    deinit { 
     NSNotificationCenter.defaultCenter().removeObserver(self) 
    } 

    private func hideButtonsEvent (notification: NSNotification) { 
     buttonOne.hidden = true 
     buttonTwo.hidden = true 
     buttonThree.hidden = true 
    } 
} 

class ClassWithoutButtonsThatTriggersTheHidingEvent { 

    private func triggerdFunctionThatHidesButtonsInOtherClass() { 
     NSNotificationCenter.defaultCenter().postNotificationName("hideButtonsEvent", object: nil) 
    } 

} 

EDIT

Да вот право, жаль, что я была маленькая ошибка в моем коде тоже :-) Пожалуйста, измените эту строку:

NSNotificationCenter.defaultCenter().addObserver(self, selector: Selector("hideButtonsEvent"), name: "hideButtonsEvent", object: nil) 

Для этой линии (см двойную точку за hideButtonsEvent):

NSNotificationCenter.defaultCenter().addObserver(self, selector: Selector("hideButtonsEvent:"), name: "hideButtonsEvent", object: nil) 

и эта линия:

private func hideButtonsEvent (notification: NSNotification) { 

Для этой линии (удалить частный модификатор):

func hideButtonsEvent (notification: NSNotification) { 
+0

Это для вас имеет смысл? Вы понимаете, что происходит? –

+0

я пытался что-то сделать, но не будет работать, Deinit { NSNotificationCenter.defaultCenter() removeObserver (само) .} частная функ hideButtonsEvent (уведомление: NSNotification) { facebookButton.hidden = истина twitterButton.hidden = истинный leaderboardButton.hidden = true removeAdsButton.hidden = true } Я думаю, что код выше не хорошо! проверьте это, если все в порядке. и NSNotificationCenter.defaultCenter().postNotificationName («hideButtonsEvent», object: nil), я помещал его в func start(), но когда я загружаю игру и вхожу в игру, чтобы запустить ее, найдена ошибка – Emm

+0

вот ошибка: 2015-08-17 19: 22: 16.928 Квадраты [10397: 699787] - [Squares.GameViewController hideButtonsEvent]: непризнанный селектор, отправленный в экземпляр 0x7fe3b41314c0 2015-08-17 19: 22: 16.933 Квадраты [10397: 699787] *** Завершение приложения из-за неперехваченного исключения «NSInvalidArgumentException», причина: '- [Squares.GameViewController hideButtonsEvent]: непризнанные селектор направлен например 0x7fe3b41314c0' *** Первый стек бросить вызов: ( – Emm

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