2016-09-20 63 views
19

我有一個奇怪的問題與Xcode 8.當我嘗試按Ctrl +拖動按鈕到現有的功能,我不能只能創建新的插座或行動。更奇怪的是,即使我通過ctrl + drag創建動作,我也無法將事件與我用於創建動作的按鈕相連接。 IB圖標也是空白的,就像動作和按鈕之間沒有連接一樣,但是實時點擊動作。 ,當我嘗試連接的行動從快捷鍵另一方面,以故事情節,我可以(@IB圖標變爲「滿」),但後來我得到異常實時點擊無法識別的選擇myActionWithSender enter image description here enter image description here無法將按鈕動作拖到Xcode 8中的現有功能

回答

-2

要解決這個問題,我不得不從雨燕2.3

0

更新我的項目語言雨燕3.0在你.swift文件更改:

@IBAction func buttonClicked(sender: UIButton) { // Do something }

@IBAction func buttonClicked(z sender: UIButton) { // Do something }

只是增添了一 'Z'(或任何標籤,你想要真的)。我嘗試了一個下劃線'_',並且這也起作用,但它提供了一個警告,所以我只是使用'z'來避開警告。

我認爲這是Xcode 8中的一個bug。某處(IB可能)它期望符合Swift 3的代碼,其中第一個參數必須有一個標籤。所以當它看到單詞「發件人」時,它假定(錯誤地)那是標籤。因此,添加一個標籤(在我的情況下是'z')使每個人都感到高興。

Swift 2.3不需要標籤。 Swift 3的確如此。所以,正如Jaroslaw所指出的,從2.3升級到3.0也會解決這個問題。但是如果你的項目在2.3上停滯不前,那麼只需添加一個標籤似乎就可以做到。

+0

奇怪遵守:如果我使用下劃線「_」我可以從IB拖到功能名稱代碼,它突出顯示了整個功能 - 並使連接成爲可能。但是,如果我使用'z'或任何其他字母數字標籤,我不能從IB拖放到函數名稱。奇怪的。 – briggsm

22

在我的Xcode版本中,IBAction是使用「Any」參數而不是「AnyObject」自動創建的。用UIButton顯式創建IBAction而不是爲我工作。

+1

這也是我的解決方案。您也可以手動將Any更改爲AnyObject它現有的代碼,它的工作原理與廣告一樣。爲什麼Xcode默認爲Any?感謝這個解決方案! – Scooter

+0

我不明白。你能澄清一下嗎?什麼和這個「任何」在哪裏? – galactikuh

+1

@galactikuh在你的函數定義中,像'@IBAction func myFunction(_ sender:Any)'。 – JakeSteam

9

就我而言,您需要將Any更改爲UIButton。它需要具體說明來自UIButton的操作。從任意到AnyObject

@IBAction func buttonClicked(_ sender: UIButton) { 

} 
0

更改發件人爲我工作

0

即使在斯威夫特3,您想對@IBAction的說法改變從(_ sender: Any)(_ sender: UIButton)或(_ sender: AnyObject),但手動。

它可能工作

0

在我的情況下,我有一個類似的故事板打開。一旦我關閉它,然後 - 點擊按鈕一次,看到它周圍的塊對齊。 - 然後右鍵單擊並拖動到ViewController。 - 最後,點擊/點擊你想將事件的代碼塊置於ViewController中的位置。

1

單擊UIButton,然後從Utilities區域轉到「Connections Inspector」。

點擊事件旁邊的空圈,將該行拖入func主體。

1

與在選擇觸開啓按鈕功能右鍵點擊裏面拖..u應該試試這個..