Xcode 8に奇妙な問題があります。Ctrlキーを押しながらボタンを既存の機能にドラッグしようとすると、新しいアウトレットまたはアクションしか作成できません。さらに奇妙なのは、Ctrl +ドラッグでアクションを作成しても、アクションの作成に使用したのと同じボタンにイベントを接続できないことです。アクションとボタンの間に接続がないようにIBアイコンも空白ですが、リアルタイムのクリックはアクションを実行します。一方、アクションをボタンにSwift=からストーリーボードに接続しようとすると(@IBアイコンは "full"になります)ですが、認識されないセレクターmyActionWithSenderをクリックするとリアルタイムで例外が発生します-
私のXcodeバージョンでは、IBActionは「AnyObject」の代わりに「Any」パラメーターで自動的に作成されます。代わりに、UIButtonを使用してIBActionを明示的に作成するとうまくいきました。
私の場合、AnyをUIButtonに変更する必要があります。 UIButtonからのアクションを特定する必要があります。
@IBAction func buttonClicked(_ sender: UIButton) {
}
UIButtonをクリックし、[ユーティリティ]エリアから[接続インスペクター]に移動します。
イベントの横にある空の円をクリックして、ラインをfunc bodyにドラッグします。
タッチアップを選択して開いたボタン機能で右クリックし、.. uをドラッグしてこれを試してください。
.Swiftファイルの変更:
@IBAction func buttonClicked(sender: UIButton) { // Do something }
に
@IBAction func buttonClicked(z sender: UIButton) { // Do something }
その小さな 'z'(または本当に必要なラベル)を追加するだけです。アンダースコア「_」を試してみましたが、それでも同様に機能しますが、警告が表示されるため、代わりに「z」を使用して警告を回避しました。
Xcode 8のバグだと思います。どこか(IB)でSwift 3の最初のパラメーターにラベルが必要なコードに準拠している必要があります。間違って)それがラベルだから、ラベル(私の場合は 'z')を追加すると、みんなが幸せになる。
Swift 2.3はラベルを必要としません。 Swift 3はそうです。したがって、Jaroslawが2.3から3.0へのアップグレードでもこの問題を回避できると指摘しました。騙す。
Swift 3)でも、@IBAction
の引数を(_ sender: Any)
から(_ sender: UIButton)
または(_ sender: AnyObject)
に変更したいが、手動で変更したい.
うまくいくかもしれません。
送信者をAnyからAnyObjectに変更するとうまくいきます
私の場合、同様のストーリーボードを開いていました。一度閉じてから-ボタンを1回クリックして、周囲のブロックを確認します。 -次に、右クリックしてViewControllerにドラッグします。 -最後に、ViewController内でイベントのコードブロックを配置する場所をクリック/タップします。