2011-12-03 17 views
8

Düğme üzerindeki bir yönteme fazladan argümanlar göndermem gerekiyor, ancak addTarget'ın bunu yapmak için bir seçiciyi göndermesinin bir yolunu bulamıyorum.UIButton'da hedef olarak bir blok ayarlamak mümkün mü?

Yine de bir blok kullanmayı tercih ederim, ancak çalışma zamanında bir bloğa bir UIButton eklemek için bir yöntem var mı?

cevap

3

Varsayılan olarak değil. Bunun olmasına rağmen UIButton'u alt sınıflara ayırabilirsiniz. Birisi bunu here yaptı.

+1

Bir alt sınıf değil neden geçerli bir nedeni vardır, sadece ben cevap –

13

Evet, BlocksKit kütüphanesi ile kolayca yapabilirsiniz:

#import <BlocksKit/UIControl+BlocksKit.h> 

[someButton addEventHandler:^(id sender) { 
    // some action here 
} forControlEvents:(UIControlEventTouchUpInside)]; 

veya RxSwift button.rx.tap gözlemlenebilir kullanın.

+2

Büyük kütüphanede geçmiş okumuyor OP harf! Teşekkürler. –

+0

teşekkürler. hızlı yayında bile çalışır –

2

Belki daha sonra parti için, ancak birkaç hafta önce, hedefinize ulaşmak için yaptığım basit bir uzantıyı kullanabilirsiniz. here'u alabilirsiniz.

Ve aşağıdaki gibi kullanılır: Bu cevap üzerine yorumların

import UIKit 

class ViewController: UIViewController { 

    override func viewDidLoad() { 
     super.viewDidLoad() 
     // Do any additional setup after loading the view, typically from a nib. 
    } 

    override func didReceiveMemoryWarning() { 
     super.didReceiveMemoryWarning() 
     // Dispose of any resources that can be recreated. 
    } 

    override func viewDidAppear(animated: Bool) { 
     let aButton = UIButton(type: .Custom) 
     aButton.frame = CGRectMake(100, 100, 100, 80) 
     aButton.backgroundColor = UIColor.greenColor() 
     aButton.handleControlEvent(.TouchUpInside) {() -> Void in 
      NSLog("ich") 
     } 
     self.view.addSubview(aButton) 
    } 
} 
İlgili konular