2015-01-13 15 views
7

Ich fand eine Frage ähnlich wie meine, aber es wurde nicht gründlich beantwortet. Es wäre toll, wenn mir jemand helfen könnte. Der Ort, wo ich die ähnliche Frage fand, ist here.Mehrere Parameter/Argumente für die Aktion - Swift

Ich verstehe klar, wie func test() wäre "test" und test(object:AnyObject) wäre "test:". Danke an this.

Also, wie wäre es mit 2 Parametern? Kann schnell 2 Argumente für 'Aktion:' nicht tun?

func popoverSelectedCode (code:AnyObject, desc:AnyObject) 

Ich habe versucht, es zu testen unten in verschiedenen Möglichkeiten, aber ohne Erfolg:

action: "popoverSelectedCode:," 

action: "popoverSelectedCode:,:" 

action: "popoverSelectedCode: :" 

action: "popoverSelectedCode: , :" 

Am nur etwa eine Woche alt in Swift so bitte freundlich sein.

EDITED Hier ist ein kurzer Clip des Codes ist

@IBAction func securityQuestButtonClicked (sender:AnyObject) 
{ 
    cellButton = sender as? UIButton; 

    var comboDescListArray = TableRoutine.loadCombobox("MobileQuestion") 

    var codeObject : NSArray = comboDescListArray[0] as NSArray; 
    var descObject : NSArray = comboDescListArray[1] as NSArray; 

    var selectionTVC = CPSelectionTVC(style:UITableViewStyle.Plain, codeArray:codeObject, descArray:descObject, target:self, action: "popoverSelectedCode::", widthForViewInPopover:650) 

    let navCtl = UINavigationController.init(rootViewController:selectionTVC) 
    popoverController = UIPopoverController.init(contentViewController:navCtl) 

    var contentHeight : CGFloat = CGFloat (UInt(selectionTVC.navigationTitleHeight) + UInt(selectionTVC.rowCount()) * UInt(selectionTVC.cellHeight)) 

    popoverController?.popoverContentSize = CGSizeMake(400.0, contentHeight) 
    popoverController?.presentPopoverFromRect(sender.bounds, inView:sender as UIView, permittedArrowDirections:UIPopoverArrowDirection.Up, animated:true) 
} 

Die popover jedoch bei Auswahl erscheint, hängt er einfach.

+0

Haben Sie eine Antwort erhalten? Ich habe das gleiche Problem. Wenn ja, wie haben Sie Ihren Selektor mit mehreren Parametern geschrieben und wie sieht die Aktionsfunktion aus? Vielen Dank. –

+0

Leider nicht. Ich war mit anderen Dingen beschäftigt, aber ich verbrachte den ganzen Tag damit, nach neuen Antworten zu suchen. Halten Sie mich auf dem Laufenden, wenn Sie auf eine Antwort stoßen. –

Antwort

10

Nur ein Hinweis auf Swift 2.2. Sie können nun die Wähler als

#selector(popoverSelectedCode(_:desc:) 
+0

Du hast gerade meinen Arsch gerettet! Ty! – MkaysWork

+0

TY! gewöhne mich immer noch an den neuen Selektor. Nur für den Fall, dass es jemand anderen hilft, war ich in der Lage Selector zu verwenden, um eine Delegate-Methode wie in Swift 2.2 'textField.delegate? .performSelector (#selector (textField (_: shouldChangeCharactersInRange: replacementString :)))' – NSGangster

1

Mit zwei Parametern wird es action::. Ein Doppelpunkt für ein Argument.

+0

Könnten Sie das näher ausführen oder ein Beispiel geben? –

+0

Es gibt nichts zu erarbeiten. Sie haben die popoverSelectedCode-Funktion als Aktion für ein Ziel bereitgestellt. In swift kannst du einen Selektor wie diesen drehen. "popoverSelectedCode ::". Zwei Doppelpunkte sagen, dass diese Aktion zwei Parameter benötigt.All diese Überprüfung/Auflösung durchgeführt in Laufzeit von der Ziel-c Laufzeit – mustafa

+0

Ich habe versucht, wie Sie vorgeschlagen haben, aber leider geht es immer noch nicht in die Action-Funktion. –

1

Wenn die Funktion zwei Parameter wie folgt hat.

func clicked(sender:AnyObject,value:AnyObject) 
{ 
} 

Dann

action = "clicked::" 
+0

Hallo Rakeshbs, ja! Ich habe das versucht, wie in meinem bearbeiteten Teil gezeigt. Aber das Problem ist, das Popover wird sich nicht bewegen. Es hängt nur im ausgewählten Zustand dort. –

+0

können Sie Ihren vollständigen Code veröffentlichen? – rakeshbs

+0

Ich habe die gesamte Funktion wie gewünscht eingefügt. Ich habe nicht die Notwendigkeit gesehen, die Action-Funktion einzufügen, da sie nicht einmal durchgeht. –

0

Hier ist, wie Sie es in Ihrem Fall erreichen können:

action: "popoverSelectedCode:desc:" 
1

Überprüfung dieser Code unten

func switchCard(card: Int, withCard card1: Int) { 
    print(card) 
} 
let singleTap1 = UITapGestureRecognizer(target: self, action: "switchCard:withCard:") 
+0

Während dieser Code die Frage beantworten kann, verbessert ein zusätzlicher Kontext, warum und/oder wie dieser Code die Frage beantwortet, seinen langfristigen Wert. – JAL

0

Für mehrere Argumente übergibt in der Wahlmethode ein:

let swipeRecognizer = UISwipeGestureRecognizer.init(target: self, action: #selector(ImageViewController.handleTap(_: sender :))) 
myCell.imageViewPhoto .addGestureRecognizer(swipeRecognizer) 
1

In Swift 2.2 Sie so etwas tun kann.

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

func onSliderValChanged(slider: UISlider, withEvent event: UIEvent?) { 
    } 

Ich hoffe, es hilft jemand da draußen.

Verwandte Themen