2015-01-13 2 views
7

Я нашел вопрос, наиболее похожий на мой, однако на него не был дан подробный ответ. Было бы здорово, если бы кто-нибудь мог мне помочь. Место, где я нашел аналогичный вопрос, - here.Множественные параметры/аргументы для действия - Swift

Я четко понимаю, как func test() будет "test" и test(object:AnyObject) будет "test:". Благодаря this.

Итак, как насчет 2 параметров? Можете быстро сделать 2 аргумента для «действия:»?

func popoverSelectedCode (code:AnyObject, desc:AnyObject) 

Я попытался тестирование его в нескольких различных способах ниже, но безрезультатно:

action: "popoverSelectedCode:," 

action: "popoverSelectedCode:,:" 

action: "popoverSelectedCode: :" 

action: "popoverSelectedCode: , :" 

Am только приблизительно неделю старого в Swift поэтому, пожалуйста, будьте добры.

EDITED Вот короткий клип кода

@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) 
} 

поповер появляется, однако при выборе, она просто висит.

+0

У вас есть ответ? Я имею дело с той же проблемой. Если да, то как вы написали свой селектор с несколькими параметрами и как выглядит функция действия. Благодарю. –

+0

К сожалению, нет. Я был занят другими вещами, но сегодня я провел целый день, пытаясь найти новые ответы. Держите меня в курсе, если вам не удастся найти ответ. –

ответ

10

Просто примечание на Swift 2.2. Теперь вы можете ввести селектор в

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

Ты просто спас мою задницу! Ty! – MkaysWork

+0

TY! все еще привыкший к новому селектору. Просто в том случае, если это помогает кому-то другому, я смог использовать селектор для вызова метода делегата, например, в Swift 2.2 'textField.delegate? .performSelector (#selector (textField (_: shouldChangeCharactersInRange: replacementString :)))' – NSGangster

1

С двумя параметрами он становится action::. Один двоеточие за один аргумент.

+0

Не могли бы вы рассказать или привести пример? –

+0

Нет ничего сложного. Вы указали функцию popoverSelectedCode как действие для некоторой цели. В быстром режиме вы можете превратить его в селектор. "PopoverSelectedCode ::". Два двоеточия говорят, что это действие принимает два параметра.Все это проверка/разрешение, выполняемые во время выполнения с помощью объектной-c runtime – mustafa

+0

Я пробовал, как вы это предполагали, но, к сожалению, она все еще не переходит в функцию действия вообще. –

1

Если функция имеет два параметра, как показано ниже.

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

Тогда

action = "clicked::" 
+0

привет ракешб, да! Я попробовал это, как показано в моей отредактированной части. Но проблема в том, что popover не движется. Он просто висит там в выбранном состоянии. –

+0

Вы можете разместить свой полный код? – rakeshbs

+0

Я вложил всю функцию по вашему запросу. Я не видел необходимости вставлять функцию действия, поскольку она даже не проходит. –

0

Вот как вы можете достичь его в вашем случае:

action: "popoverSelectedCode:desc:" 
1

проверки этого ниже код

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

Хотя этот код может ответить на вопрос, предоставляя дополнительный контекст относительно того, почему и/или как этот код отвечает на вопрос, улучшает его долгосрочную ценность. – JAL

0

Для нескольких аргументов проходит в методе селекторного:

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

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

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

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

Я надеюсь, что это поможет кому-то там.

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