使用嵌套函数作为`UIButton`的操作

时间:2016-11-18 22:19:51

标签: swift function uibutton selector target

我正在尝试向我的UIButton添加目标,但在尝试使用嵌套函数作为其操作时会出错。

这是我的代码:

func createAddView() {
    let addButton = UIButton()

    func remove(sender: UIButton) {
        print("Remove")
    }

    addButton.addTarget(self, action: #selector(remove(sender:)), for: .touchUpInside)
}

它给了我这个警告:

warning: No method declared with Objective-C selector 'remove'.

我需要'删除'功能嵌套在'createAddView'函数中,因为我需要删除和淡出在'createAddView'函数中创建的其他一些UIViews

任何人都知道我该怎么做?

2 个答案:

答案 0 :(得分:1)

您无法执行此操作,因为func remove仅存在于func createAddView块中。 向#selector()UIControl添加一个func remove没有任何限制。因此,您可以在类块中声明#selector,并在每次创建新按钮时将其添加为selection

答案 1 :(得分:0)

因为func remove是在createAddView()方法中创建的。

这是固定代码:

func createAddView() {
    let view = UIView() //added for testing purposes 
    view.frame = CGRect(x: 0, y: 0, width: 320  , height: 640) //added for testing purposes
    let addButton = UIButton()
    addButton.frame = CGRect(x: 0, y: 0, width: 100, height: 50) //added for testing purposes


    view.addSubview(addButton)



    addButton.addTarget(self, action: #selector(remove(sender:)), for: .touchUpInside)

}

func remove(sender: UIButton) {
    UIView.animate(withDuration: 0.3, delay: 0, options: UIViewAnimationOptions.allowUserInteraction, animations: { () -> Void in
        print("Add")
    }) {(Bool) -> Void in
        print("Done")
    }
}