2010-12-20 8 views
2

Ich erstelle eine UIALLART-Ansicht mit zwei Schaltflächen und einem Textfeld, und ich möchte deaktivieren Sie die Schaltfläche "OK", wenn das Textfeld leer ist. Wie ich das Uibutton-Objekt bekommen kann, um es zu ändern ist der Status aktiviert.Eigenschaft aktiviert Schaltfläche in Uialertview

Antwort

11

können Sie verwenden, um die enabled Eigenschaft geerbt von UIControl:

for(UIView *view in alertView.subviews) { 
    if([view isKindOfClass:[UIButton class]]) { 
     ((UIButton *) view).enabled = NO; 
    } 
} 

Aus Gründen der Wiederverwertbarkeit, dies wird noch einfacher, wenn Sie eine Kategorie auf NSArray haben, die Objekte einer bestimmten Klasse ruft:

@implementation NSArray (JRAdditions) 

- (NSArray *)objectsOfClass:(Class)cls { 
    NSParameterAssert(cls); 
    NSMutableArray *array = [@[] mutableCopy]; 
    for(id obj in self) if([obj isKindOfClass:cls]) [array addObject:obj]; 
    return [array copy]; 
} 

@end 
schauen jetzt

kann Ihr Code wie folgt aus:

[[alertView.subviews objectsOfClass:[UIButton class]] enumerateObjectsUsingBlock:^(UIButton *obj, NSUInteger index, BOOL *stop) { 
    obj.enabled = NO; 
}]; 
+0

eine Methode wie ViewAtIndex nicht vorhanden? – alex

+1

@alex Wenn Sie eine Ansicht in einem bestimmten Index abrufen müssen, können Sie '[[view subviews] objectAtIndex: someIndex]' –

+3

+1 für diese Antwort verwenden, da es eine gute Lösung für Benutzer ist, die einfach zu schreiben sind Funktionen, die Funktionalität benötigen, ohne dass die aufrufenden Klassen Delegaten sein müssen und ihre eigenen Delegatfunktionen bereitstellen müssen (in diesem Fall 'alertViewShouldEnableFirstOtherButton: '). Außerdem, wenn Sie mehrere Schaltflächen haben und eine bestimmte benötigen, 'if ([((UIButton *) anzeigen) .titleLabel.text isEqualToString: @" Middle Button "]' macht eine gute zweite wenn -check. – joverboard

0

Seit iOS 5 können Sie dies in der UIAlertViewDelegate-Instanz tun.

-(BOOL) alertViewShouldEnableFirstOtherButton:(UIAlertView *)alertView 
{ 
    return [[alertView textFieldAtIndex:0].text length] > 0; 
}