Swift / iOS - UIButton Sender提供更多信息

时间:2015-10-25 18:16:48

标签: ios swift

让我们假设您在Swift中为iOS构建了一个计算器。当用户点击操作(除法,加法,减法等)时,我想避免使用单独的方法来处理每个操作。

相反,我希望有一个工厂,根据发件人,确定要使用的正确OperationType子类(减法,乘法等)

我的问题是:将信息直接存储在Xcode中的UI按钮上是否正确?例如,在Addition按钮(+)上,如果我用Addition标记它,我就可以使用该信息加载Addition类。

类似地,对于每个数字,我宁愿有一个函数来处理用户推送任何数字。但是,要确定发件人,使用sender.title似乎有点草率,因为它将数字的可视标题绑定到代码。是否适合提供tags来处理这个问题,还是有其他系统来处理这个问题?

3 个答案:

答案 0 :(得分:2)

你当然可以做到这一点,有时它会带来干净的设计。视图对象具有标记属性(Int。)您可以在操作方法上放置一个switch语句来打开标记值。通常,您应该使用从1或更大的标记值开始,因为0是默认标记值。

如果需要超过整数值,可以将值保存到使用标记值索引的数组中,也可以使用关联存储实际存储附加到按钮的对象。搜索" Cocoa相关对象"有关该技术的更多信息。或者你可以看看我放在github上的一个演示项目:https://github.com/DuncanMC/AssocitiveStorageDemo(用Objective-C编写,但Swift中的技术是相同的)

答案 1 :(得分:1)

function remove_item_from_cart(product){

    var data = {
                "action" : "remove_from_cart",
                "product_id" : product,
    };

    jQuery.post(WC_VARIATION_ADD_TO_CART.ajax_url, data, function(response) {
        $(document.body).trigger("update_checkout");
    });

}

答案 2 :(得分:0)

您可以使用标记属性

func buttonClicked(sender:AnyObject) {

     let button = sender as! UIButton

     if button.tag == 0 {
         ...
     }
     else if button.tag == 1 {
        ...
     }
}