【问题标题】:IBOutlet and IBAction in SwiftSwift 中的 IBOutlet 和 IBAction
【发布时间】:2015-09-14 19:19:45
【问题描述】:

我将IBOutlet 和IBAction 连接到我的按钮变量,从Interface Builder 到我的视图控制器。如何在 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

【问题讨论】:

    标签: swift iboutlet


    【解决方案1】:

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

    @IBAction func buttonAction() {}
    

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

    - (IBAction)buttonAction {}
    

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

    如果您想了解 sender 参数,我会推荐this SO post。

    编辑:

    对于你想做的事情,我创建了一个IBOutlet 和一个IBAction,这样我就可以用outlet 变量来改变它的属性,并且用IBAction 来做一些事情,就像你做的那样如上所示:

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

    例如,如果我想隐藏按钮,我会将这段代码放在viewDidLoad中

    OK.hidden = true
    

    该代码中的 OK 用于 outlet 变量,如果我想在按下按钮时将“You press me”打印到控制台,我会使用此代码:

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

    上面我正在使用操作将“You press me”打印到控制台。

    需要注意的几点:

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

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

    除此之外,在命名变量、常量、函数等时应使用驼峰式命名。

    【讨论】:

    • 如果我创建一个 Action 类型的新按钮,上述解决方案将有效。但是我创建了一个插座类型的按钮并想向它添加一个动作。我创建出口按钮的原因是我想要一个按钮的变量,以便我可以设置按钮变量的属性。现在我也想给它添加动作。
    【解决方案2】:

    一种方法是从按钮控制拖动到视图控制器并选择操作:

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

    【讨论】:

    • 连接同一个按钮两次?一个用于 Outlet,一个用于 Action?
    【解决方案3】:

    以下是您可以遵循的步骤-

    对于@IBOutlet

    1.在类名之后声明你的接口构建器元素属性

    class SomeViewController: UIViewController{
    
        @IBOutlet weak var aTextField : UITextField! ////Your Interface builder Element
    

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

    对于@IBAction

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

    @IBAction func anAction(_sender : AnyObject){
    
    
    }
    

    2.Hook Storyboard 中的方法。

    希望对你有帮助。

    【讨论】:

      【解决方案4】:

      您可以简单地从情节提要中添加动作。看图。

      【讨论】:

        猜你喜欢
        • 2010-12-11
        • 1970-01-01
        • 1970-01-01
        • 2011-10-30
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2021-10-02
        相关资源
        最近更新 更多