Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/swift/18.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Swift/iOS-提供更多信息的UIButton发送者_Ios_Swift - Fatal编程技术网

Swift/iOS-提供更多信息的UIButton发送者

Swift/iOS-提供更多信息的UIButton发送者,ios,swift,Ios,Swift,假设你有一个用Swift为iOS构建的计算器。当用户点击除法、加法、减法等运算时,我希望避免使用单独的方法来处理每个运算 相反,我更希望有一个工厂,它基于发送方,确定使用减法、乘法等的正确OperationType子类 我的问题是:直接在Xcode的UI按钮上存储信息是否合适?例如,在Addition按钮+,如果我用Addition标记它,那么我可以使用该信息加载Addition类 类似地,对于每个数字,我希望有一个函数来处理用户按下任何数字。但是,为了确定发件人,使用sender.title似

假设你有一个用Swift为iOS构建的计算器。当用户点击除法、加法、减法等运算时,我希望避免使用单独的方法来处理每个运算

相反,我更希望有一个工厂,它基于发送方,确定使用减法、乘法等的正确OperationType子类

我的问题是:直接在Xcode的UI按钮上存储信息是否合适?例如,在Addition按钮+,如果我用Addition标记它,那么我可以使用该信息加载Addition类


类似地,对于每个数字,我希望有一个函数来处理用户按下任何数字。但是,为了确定发件人,使用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中技术是相同的