Hoe programmeer ik automatisch een CallBacks voor een UIButton?

Handmatig gebouwd:

[btnRun addTarget:self action:@selector(RunApp:) forControlEvents:UIControlEventTouchUpOutside];

Programmatisch gebouwd: iets van het volgende zoals ??

- (void) setRunButton:(UIButton*)objectName mySelector:(NSString*)funcName myControlEvent:(NSString*) controlEvent
{
    [objectName addTarget:self action:@selector(funcName) forControlEvents:controlEvent];
}
0

2 antwoord

Ik denk dat je zoiets als het volgende nodig hebt:

- (void)setRunButton:(UIButton *)objectName mySelector:(NSString *)action myControlEvent:(UIControlEvents)controlEvent {

   [objectName addTarget:self action:NSSelectorFromString(action) forControlEvents:controlEvent];

}

Het is ongebruikelijk om een ​​selector door te geven als een NSString maar u kunt NSSelectorFromString() gebruiken om de reeksnaam van de selector in een selector te converteren.

Parameters voor besturingsgebeurtenissen zijn geen tekenreeksen, het is een opsomming, dus ik heb de parameter myControlEvent gewijzigd in het type UIControlEvents .

Het is gebruikelijker om de selector door te geven aan de methode met behulp van @selector (actie) . @selector wordt echter tijdens de compilatie afgehandeld, dus de parameter is eigenlijk geen NSString . In dit geval zou de methode er als volgt uitzien:

- (void)setRunButton:(UIButton *)objectName mySelector:(SEL)action myControlEvent:(UIControlEvents)controlEvent {

   [objectName addTarget:self action:action forControlEvents:controlEvent];

}
3
toegevoegd

Geef de volledige selector door als parameter

- (void) setRunButton:(UIButton*)objectName mySelector:(SEL)action myControlEvent:(NSString*) controlEvent
{
    [objectName addTarget:self action:action forControlEvents:controlEvent];
}
1
toegevoegd