2016-06-17 429 views
3

是否可以通過選擇器傳遞一個int變量,例如: #selector(運行(1)),或在必要時#selector(運行(2))將靜態參數添加到Swift中的#selector中

更多背景:

let button = UIBarButtonItem(title: "Run", 
             style: UIBarButtonItemStyle.Plain, 
             target: self, 
             action: #selector(run(1))) 

回答

4

確認一些iOS開發後,沒有你做不到這一點呢。

但有一個選擇。您可以在操作方法中接收發件人對象。您可以將任何屬性添加到發件人類。並在行動方法中接收。

例如:

第一種方法

let button = UIBarButtonItem(title: "Run", 
            style: .Plain, 
            target: self, 
            action: #selector(run(_:))) 
button.tag = 1 

而且你會接受她這樣的

func run(sender: UIBarButtonItem) { 
    let passedInteger = sender.tag 
} 

但它只有在傳遞的參數是一個整數工作。這裏是你如何能做到這一點,如果你想傳遞多個參數與任何數據類型 - >看看第二種方法

第二種方法

子類的UIBarButtonItem

class MyBarButtonItem: UIBarButtonItem { 
    var passedParameter: String? 
} 

並接受它像這樣

let button = MyBarButtonItem(title: "Run", 
            style: .Plain, 
            target: self, 
            action: #selector(run(sender:))) 

button.passedParameter = "John Doe" 

func run(sender: MyBarButtonItem) { 
    // now you have the parameter 
    let parameter = sender.passedParameter 
} 
+0

請不要大幅改變你的答案已被接受後。 – xoogler

0

沒有,但愛德華提到,有可能通過按鈕本身傳遞值。不建議

let button = UIBarButtonItem(title: "Run", 
            style: UIBarButtonItemStyle.Plain, 
            target: self, 
            action: #selector(run(_:))) 
button.tag = 1 

.....

func run(sender: UIButton){ 
    doSomething(sender.tag) 
} 

傳遞值通過標籤,但是這是一種方式

相關問題