Swift中的IBOutlet和IBAction

lin*_*ser 8 iboutlet swift

我将一个IBOutletIBAction我的按钮变量从Interface Builder连接到我的View Controller.如何在Swift中为按钮添加动作方法?这段代码似乎不起作用.

@IBOutlet var OK: UIButton!
@IBAction func OK(sender: UIButton){}
Run Code Online (Sandbox Code Playgroud)

我找到的Objective-C等价物是:

@interface Controller
{
    IBOutlet id textField; // links to TextField UI object
}

- (IBAction)doAction:(id)sender; // e.g. called when button pushed
Run Code Online (Sandbox Code Playgroud)

Cal*_*ter 11

当您将按钮附加到viewController,并创建一个动作(IBAction使用ctrl-drag)时,你创建一个方法(也称为函数),在Swift中看起来像这样(如果它没有参数):

@IBAction func buttonAction() {}
Run Code Online (Sandbox Code Playgroud)

在Objective-C中,同样的事情看起来像这样:

- (IBAction)buttonAction {}
Run Code Online (Sandbox Code Playgroud)

这意味着这@IBAction func OK(sender: UIButton){}是一种行动方法.

如果你想知道发件人的论点,我会推荐这篇 SO帖子.

编辑:

对于你想要做的事情,我创建一个IBOutlet和一个IBAction,这样我可以用outlet变量改变它的属性,并且具有动作方面的东西IBAction,就像你在上面显示的那样:

@IBOutlet var OK: UIButton!
@IBAction func OK(sender: UIButton){} 
Run Code Online (Sandbox Code Playgroud)

例如,如果我想隐藏按钮,我会将此代码放入 viewDidLoad

OK.hidden = true
Run Code Online (Sandbox Code Playgroud)

该代码中的OK是针对outlet变量的,如果我想在按下按钮时将"You pressed me"打印到控制台,我会使用以下代码:

@IBAction func OK(sender: UIButton){
  println("You pressed me")
}
Run Code Online (Sandbox Code Playgroud)

上面我正在使用动作将"你逼我"打印到控制台.

有几点需要注意:

当Swift 2.0发布时,println将被更改为print.还有你的行动和出口,我建议给他们不同的名字,以便更容易区分这两者,如下所示:

@IBOutlet var okOutlet: UIButton!
@IBAction func okAction(sender: UIButton){} 
Run Code Online (Sandbox Code Playgroud)

除此之外,在命名变量,常量,函数等时应该使用驼峰大小写.


Pro*_*tto 7

一种方法是从您的按钮控制拖动到您的viewcontroller并选择操作: 在此输入图像描述

如果您已连接按钮的操作,则代码应该可以正常工作.


Tun*_*her 5

您可以遵循以下步骤 -

为了@IBOutlet

1.在类名之后声明您的界面构建器元素属性

class SomeViewController: UIViewController{

    @IBOutlet weak var aTextField : UITextField! ////Your Interface builder Element
Run Code Online (Sandbox Code Playgroud)

2.从情节提要中挂钩 IB 元素。

在此输入图像描述

为了@IBAction

1.在你的类中编写一个方法(比如SomeViewController

@IBAction func anAction(_sender : AnyObject){


}
Run Code Online (Sandbox Code Playgroud)

2.Hook来自Storyboard的方法。

在此输入图像描述

希望它可能有所帮助。