Swift中的IBOutlet和IBAction

11

我已经在 Interface Builder 中将我的按钮变量连接到了 View Controller 中的 IBOutletIBAction。那么,我该如何在 Swift 中为按钮添加一个操作方法呢?但是,这段代码似乎不起作用。

@IBOutlet var OK: UIButton!
@IBAction func OK(sender: UIButton){}

我找到的Objective-C等效代码是:

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

- (IBAction)doAction:(id)sender; // e.g. called when button pushed
4个回答

13

当您将一个按钮附加到viewController并使用Ctrl-Drag创建一个动作(IBAction)时,如果它没有参数,您将在Swift中创建一个像这样的方法:

当你把一个按钮附着到viewController上,并使用ctrl-drag创建一个action (IBAction)时,如果它没有参数,你就会在Swift中创建一个看起来像这样的方法:

@IBAction func buttonAction() {}

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

- (IBAction)buttonAction {}

这意味着@IBAction func OK(sender: UIButton){}是一个操作方法。

如果你想了解sender参数,我建议参考这篇StackOverflow帖子。

编辑:

为了实现你想要的功能,我创建了一个IBOutlet和一个IBAction,这样我就可以用outlet变量改变它的属性,并在IBAction中处理操作的事情,就像你上面展示的那样:

@IBOutlet var OK: UIButton!
@IBAction func OK(sender: UIButton){} 
例如,如果我想隐藏按钮,我会将这段代码放在viewDidLoad中。
OK.hidden = true

如果我想在按钮被按下时将"You pressed me"打印到控制台,那么上述代码中的OK是为了outlet变量。以下是相应代码:

@IBAction func OK(sender: UIButton){
  println("You pressed me")
}

上面我使用了操作将“你按了我”打印到控制台中。

需要注意以下几点:

当Swift 2.0发布时,println会被改成print。此外,在您的操作和输出中,我建议给它们不同的名称,以便更容易区分两者,例如:

@IBOutlet var okOutlet: UIButton!
@IBAction func okAction(sender: UIButton){} 

此外,在命名变量、常量、函数等时,你应该使用驼峰命名法。


1
以上提到的解决方案适用于我创建一个新的Action类型按钮。但是我创建了一个Outlet类型的按钮,并希望为其添加一个Action。我创建Outlet按钮的原因是我想要一个按钮变量,以便我可以为按钮变量设置属性。现在我也想添加Action。 - linux-user

9

一种方法是从您的按钮控件中使用控制拖动,选择操作并将其拖到视图控制器中:

enter image description here

如果您已连接按钮的操作,则您的代码应该能够正常工作。


1
将同一个按钮连接两次?一个用于Outlet,另一个用于Action? - linux-user

5
以下是您可以遵循的步骤 -
对于@IBOutlet 1.在类名后立即声明您的界面构建器元素属性
class SomeViewController: UIViewController{

    @IBOutlet weak var aTextField : UITextField! ////Your Interface builder Element

2.从Storyboard中挂接IB元素。

enter image description here

对于@IBAction

1.在您的类中(例如SomeViewController)编写一个方法。

@IBAction func anAction(_sender : AnyObject){


}

2.从Storyboard中挂接方法。

在此输入图片描述

希望这能有所帮助。


3
你可以直接从你的故事板中添加操作。请参见图像。Image

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接