2011-12-03 11 views
8

Necesito enviar argumentos adicionales a un método al presionar un botón, pero no puedo encontrar la forma de que addTarget envíe un selector para hacer eso.¿Es posible establecer un bloque como destino en un UIButton?

Preferiría usar un bloque de todos modos, pero ¿hay algún método para adjuntar un bloque a un UIButton en tiempo de ejecución?

Respuesta

3

No por defecto. Sin embargo, podrías subclase UIButton para que esto ocurra. Alguien lo hizo here.

+1

Uno de los comentarios sobre la respuesta tiene una razón válida de por qué no a la subclase, acabo caso de que la OP no lee más allá de la gran biblioteca respuesta –

13

Sí, puede hacerlo fácilmente con la biblioteca BlocksKit:

#import <BlocksKit/UIControl+BlocksKit.h> 

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

o utilizar RxSwift button.rx.tap observable.

+2

! Gracias. –

+0

gracias. incluso funciona en rápido yay –

2

Quizás más tarde para la fiesta, pero puede usar una extensión simple que hice hace algunas semanas para lograr su objetivo. Puede obtenerlo here.

y utilizarlo de la siguiente manera:

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) 
    } 
} 
Cuestiones relacionadas