我正在动态地将标签和按钮添加到TextView中。这是通过循环包含标签名称、按钮名称和按钮函数名称的数组来驱动的。为了简洁起见,我将这里的代码更改为使用硬编码索引而不是循环,并且我没有包括标签和按钮创建函数。标签创建得很好。第一个按钮也创建得很好。因为我指定Button 1Clicked作为#selector参数。只有当我指定Button 2Clicked作为#selector参数时,才能正确创建第二个按钮。如果我试图在button #selector参数中引用数组,则会收到编译器错误“'#selector'的参数不引用'@objc'方法,属性,or initializer”。假设可以使用一个包含@objc函数名的数组作为#selector的参数,有人能为我提供合适的语法吗?我使用的是Swift 5和Xcode 11.2。提前感谢您的帮助。
@objc func Button1Clicked(sender: UIButton) {
print("You pressed button 1")
}
@objc func Button2Clicked(sender: UIButton) {
print("You pressed button 2")
}
.
.
.
var labelNames = [UILabel]()
let Label1:UILabel = UILabel()
let Label2:UILabel = UILabel()
labelNames = [Label1, Label2]
var buttonNames = [UIButton]()
let Button1:UIButton = UIButton()
let Button2:UIButton = UIButton()
buttonNames = [Button1, Button2]
let buttonSelectorNames = ["Button1Clicked", "Button2Clicked"]
configureLabel(labelNameIn: labelNames[0],
textIn: "aaaaa",
textColorIn: appColorWhite,
backgroundColorIn: appColorBlue,
yPositionIn: 0)
statusTextview.addSubview(labelNames[0])
configureLabel(labelNameIn: labelNames[1],
textIn: "-- bbbbb",
textColorIn: appColorWhite,
backgroundColorIn: appColorBlue,
yPositionIn: 25)
statusTextview.addSubview(labelNames[1])
configureButton(buttonNameIn: buttonNames[0],
xPositionIn: 0,
yPositionIn: 50,
textIn: "B1",
textColorIn: appColorBlack,
backgroundColorIn: appColorBrightGreen,
textViewIn: statusTextview)
buttonNames[0].addTarget(self,
action: #selector(Button1Clicked),
for: .touchUpInside)
statusTextview.addSubview(buttonNames[0])
configureButton(buttonNameIn: buttonNames[1],
xPositionIn: 100,
yPositionIn: 50,
textIn: "B2",
textColorIn: appColorBlack,
backgroundColorIn: appColorBrightGreen,
textViewIn: statusTextview)
buttonNames[1].addTarget(self,
action: #selector(buttonSelectorNames[1]),
for: .touchUpInside)
statusTextview.addSubview(buttonNames[1])
2条答案
按热度按时间ycl3bljg1#
你不需要为每个按钮定义按钮点击事件button.you可以定义公共函数并将其分配给循环中的所有按钮。然后你可以通过按钮标记指定
在循环中将当前索引指定为按钮标记
按钮点击功能
xqkwcwgp2#
在过去,我有一个处理相同类型的需求。我是通过将
selector
存储在Array
中来实现的。请参考代码片段。我相信它会帮助你。
验证码:
输出: