2016-01-08 23 views
1

我試圖在對象 - 下面的代碼轉換爲SWIFT:添加封閉到的CustomButton斯威夫特

CustomButton.h

​​

CustomButton.m

- (void)executeTargetActionBlock { 
     if (self.defaultAction) 
      self.defaultAction(); 
} 

- (void) initialize { 
[self addTarget:self action:@selector(executeTargetActionBlock) forControlEvents:UIControlEventTouchUpInside]; 
} 

這個initializeMethod在CustomButton的init方法中被調用。

+1

值得指出的是,如果'defaultAction'對按鈕實例的所有者有一個'strong'引用,很容易創建一個保留循環(這似乎很可能)。 –

回答

4
class CustomButton: UIButton { 
    var defaultAction: (() -> Void)? 

    override init(frame: CGRect) { 
     super.init(frame: frame) 

     self.addTarget(self, action: "executeTargetActionBlock", forControlEvents: UIControlEvents.TouchUpInside) 
    } 

    func executeTargetActionBlock() { 
     if let action = defaultAction { 
      action() 
     } 
    } 
} 
+2

爲了使這個更加靈活,你可以縮寫'UIControlEvents.TouchUpInside'到'.TouchUpInside',並使條件塊的執行成爲一行'defaultAction?()' –