2016-06-16 2 views
3

, пожалуйста, скажите мне, как отправить дополнительный параметр в функцию addtarget в swift 2.2? Пример:Как отправить дополнительный параметр в функцию addtarget?

button.addTarget(self, action: #selector(classname.myFunc(_:)), forControlEvents: UIControlEvents.TouchUpInside)) 

func myFunc(sender:UIButton){ 
    print(“i am here“) 
} 

в

func myFunc(sender:UIButton,parameter:String){ 
    print(“i am here“) 
} 
+0

Возможный дубликат [Приложить параметр к действию button.addTarget в Swift] (http://stackoverflow.com/questions/24814646/attach-parameter-to-button-addtarget-action-in-swift) – KTPATEL

ответ

0

Это не возможно. Вы должны использовать обходной путь.

button.addTarget(self, action: #selector(classname.myFunc(_:)), forControlEvents: UIControlEvents.TouchUpInside)) 

func myFunc(sender:UIButton){ 
    self.myFunc2(sender, parameter: "My parameter") 
} 

func myFunc2(sender:UIButton,parameter:String){ 
} 
+0

Это не решит проблему, если параметр не является глобальной varibale. Если бы это было так, нам не нужно было передавать сам параметр. Селектор может предоставлять только вызывающий объект в качестве отправителя. Больше ничего. – kandelvijaya

+0

спасибо .. для вашего ответа. –

+0

@kandelvijaya В чем проблема? ОП не упоминал ничего. Во всяком случае, возможно, что OP хочет вызывать 'myFunc2' со строкой X при нажатии кнопки1, а' myFunc2' со строкой Y, когда кнопка 2 нажата. Так что в этом дизайне нет ничего плохого. – Code

1

Вы можете создать подкласс UIButton, добавьте одно свойство с именем parameter, который вы хотите передать в качестве дополнительного параметра.

В addTarget() вы можете выбрать только передачу звонящего или нет. В этом случае вызывающим абонентом является UIButton.

Поэтому использовать подкласс и вызвать addTarget(), то вы можете получить строку, которую вы хотите отправить:

func myFunc(sender: customUIButton) { 
    // do something with sender.parameter 
} 

Надеется, что это может помочь вам.

1

В Swift 2.2 вы можете сделать что-то вроде этого.

myUISlider.addTarget(self, action:#selector(self.onSliderValChanged(_:withEvent:)), forControlEvents: .ValueChanged) 

func onSliderValChanged(slider: UISlider, withEvent event: UIEvent?) { 
    } 
Смежные вопросы