enum ButtonType: String {
case nonIvar
case other
var tag: Int {
switch self {
case .nonIvar:
return 0
case .other:
return 1
}
}
var title: String {
switch self {
case .nonIvar:
return "Non iVar Button"
case .other:
return "Some other Button"
}
}
}
然后我们有一个处理tap函数的类
class ButtonHandler {
@IBAction func handleTap(_ sender: UIButton) {
if sender.tag == ButtonType.nonIvar.tag {
// do something with the none ivar buton
} else {
// handle other type
}
}
}
3条答案
按热度按时间l7wslrjt1#
任何数量的按钮可以有一个单一的动作,然后我们需要标记来区分基于按钮标记的动作。你实际上并不需要每个按钮的出口,如果你是从故事板设置标记,这里是关于标记的详细文章:
使用多个UIButton并利用其Tag属性
6yoyoihd2#
很多情况下,许多按钮都有相同的ibaction。在这种情况下,标签可以帮助
4ioopgfo3#
正如其他人所说,该函数可以完全独立于按钮,它可以完全在另一个类中。
按钮可能不在StoryBoards中,可以通过编程方式创建,也可能是动态创建,因此可能不需要检查传递给函数的按钮是否与局部变量相同(因为按钮可能不是函数所基于的类上的ivar)
标签给予了一种简单的方法来为按钮或视图提供一些标识符,当函数被调用时,可以交叉引用这些标识符,以实现所需的结果
下面是一个示例,请记住,这是为了提供详细信息而设计的
在ViewController中,你需要动态地创建一个按钮,但不想把它作为一个变量存储在VC中。你还有一个单独的类来处理点击
我们可以创建一个枚举来处理按钮类型,它处理按钮类型的标记和标题
然后我们有一个处理tap函数的类
然后在视图控制器中创建按钮,将上面的两个示例连接起来
这意味着处理程序可以用于任何类,按钮类型可以在整个应用程序中平等使用,并且行为相同,无需重复代码
希望这有帮助!