Swift/iOS-提供更多信息的UIButton发送者
假设你有一个用Swift为iOS构建的计算器。当用户点击除法、加法、减法等运算时,我希望避免使用单独的方法来处理每个运算 相反,我更希望有一个工厂,它基于发送方,确定使用减法、乘法等的正确OperationType子类 我的问题是:直接在Xcode的UI按钮上存储信息是否合适?例如,在Addition按钮+,如果我用Addition标记它,那么我可以使用该信息加载Addition类Swift/iOS-提供更多信息的UIButton发送者,ios,swift,Ios,Swift,假设你有一个用Swift为iOS构建的计算器。当用户点击除法、加法、减法等运算时,我希望避免使用单独的方法来处理每个运算 相反,我更希望有一个工厂,它基于发送方,确定使用减法、乘法等的正确OperationType子类 我的问题是:直接在Xcode的UI按钮上存储信息是否合适?例如,在Addition按钮+,如果我用Addition标记它,那么我可以使用该信息加载Addition类 类似地,对于每个数字,我希望有一个函数来处理用户按下任何数字。但是,为了确定发件人,使用sender.title似
类似地,对于每个数字,我希望有一个函数来处理用户按下任何数字。但是,为了确定发件人,使用sender.title似乎有点草率,因为它将数字的可视标题绑定到代码。那么,是否应该提供标签来处理此问题,或者是否有其他系统来处理此问题?您可以使用tag属性
override func viewDidLoad() {
super.viewDidLoad()
let button1 = UIButton(frame: CGRect(x: 0, y: 0, width: 200, height: 200));
let button2 = UIButton(frame: CGRect(x: 0, y: 250, width: 200, height: 200));
button1.backgroundColor = UIColor.greenColor();
button2.backgroundColor = UIColor.yellowColor();
button1.addTarget(self, action: "buttonTaped:", forControlEvents: .TouchUpInside);
button2.addTarget(self, action: "buttonTaped:", forControlEvents: .TouchUpInside);
button1.tag = 0;
button2.tag = 1;
self.view.addSubview(button1);
self.view.addSubview(button2);
}
func buttonTaped(button:UIButton){
switch(button.tag){
case 0:
print("button 1 taped");
break;
case 1:
print("button 2 taped");
break;
default:
break;
}
}
func buttonClicked(sender:AnyObject) {
let button = sender as! UIButton
if button.tag == 0 {
...
}
else if button.tag == 1 {
...
}
}
您可以使用标记属性
func buttonClicked(sender:AnyObject) {
let button = sender as! UIButton
if button.tag == 0 {
...
}
else if button.tag == 1 {
...
}
}
您当然可以做到这一点,有时这会使设计更简洁。视图对象的标记属性为Int。您可以在操作方法上放置一个开关语句,该语句将开关标记值。通常,您应该使用从1或更大开始的标记值,因为0是默认标记值
如果需要多于一个整数值,则可以将值保存到使用标记值进行索引的数组中,也可以使用关联存储来实际存储附加到按钮的对象。在Cocoa关联对象上搜索该技术的更多信息。或者你可以看看我放在github上的一个演示项目:用Objective-C编写,但在Swift中的技术是相同的,你当然可以这样做,有时它可以提供一个干净的设计。视图对象的标记属性为Int。您可以在操作方法上放置一个开关语句,该语句将开关标记值。通常,您应该使用从1或更大开始的标记值,因为0是默认标记值 如果需要多于一个整数值,则可以将值保存到使用标记值进行索引的数组中,也可以使用关联存储来实际存储附加到按钮的对象。在Cocoa关联对象上搜索该技术的更多信息。或者你可以看看我放在github上的一个演示项目:用Objective-C编写,但在Swift中技术是相同的