2015-10-22 4 views
0

Я создал две кнопки в моей viewDidLoad() функции:Swift: Получение кнопки для работы

buttonZ.frame = CGRectMake(0, 20, 100, 50) 
    buttonZ.backgroundColor = UIColor.greenColor() 
    buttonZ.setTitle("Zurück", forState: UIControlState.Normal) 
    buttonZ.addTarget(self, action: "buttonZAction:", forControlEvents: UIControlEvents.TouchUpInside) 
    self.view.addSubview(buttonZ) 

    buttonV.frame = CGRectMake(screenBreite - 100, 20, 100, 50) 
    buttonV.backgroundColor = UIColor.greenColor() 
    buttonV.setTitle("Vorwärts", forState: UIControlState.Normal) 
    buttonV.addTarget(self, action: "buttonVAction:", forControlEvents: UIControlEvents.TouchUpInside) 
    self.view.addSubview(buttonV) 

Вне viewDidLoad() я реализовал две функции: buttonZAction() и buttonVAction()

func buttonZAction(){ 
    if(level - 1 >= 1){ 
     level = level - 1 
     spielfeldChooser() 
    } 
} 

func buttonVAction(){ 
    if(level + 1 <= maxLevel){ 
     level = level + 1 
     spielfeldChooser() 
    } 
} 

Проблема возникает, когда я нажав на эти кнопки. Исключение появляется где-то, что я не поймаю (я просто включил основную часть ошибки).

`*** Нагрузочного приложения из-за неперехваченное исключение 'NSInvalidArgumentException', причина: '- [Pushy_2_0.ViewController buttonVAction]: непризнанный селектор посланного к экземпляру 0x15db5410'

Я надеюсь, что вы можете мне помочь.

ответ

1

У вас есть "buttonZAction:", это означает, что ваш селектор должен получить параметр. Если вы не передадите их изменить эти строки:

buttonZ.addTarget(self, action: "buttonZAction:", forControlEvents: UIControlEvents.TouchUpInside) 
buttonV.addTarget(self, action: "buttonVAction:", forControlEvents: UIControlEvents.TouchUpInside) 

To:

buttonZ.addTarget(self, action: "buttonZAction", forControlEvents: UIControlEvents.TouchUpInside) 
buttonV.addTarget(self, action: "buttonVAction", forControlEvents: UIControlEvents.TouchUpInside) 
0

Ваш селектор имеет аргумент. но вы не объявлял этот аргумент в функции buttonZAction как этот

func buttonZAction(sender: UIButton!){ 
    if(level - 1 >= 1){ 
     level = level - 1 
     spielfeldChooser() 
    } 
} 

func buttonVAction(sender: UIButton!){ 
if(level + 1 <= maxLevel){ 
    level = level + 1 
    spielfeldChooser() 
} 
} 
0

Вы добавили «:» в конце строки, обозначающей имя метода действия, эта последняя не принимает входной параметр. чтобы не ошибиться, было бы лучше использовать класс Selector следующим образом:

buttonV.addTarget (self, Action: Selector (buttonVAction()), forControlEvents: UIControlEvents.TouchUpInside) 
Смежные вопросы