2010-12-20 70 views
2

我使用两个按钮和一个文本框创建了一个uialertview,如果文本框为空,我想禁用按钮“Ok”。我如何获得uibutton对象,更改为启用状态。属性在uialertview中启用了按钮

回答

11

可以使用enabled财产UIControl继承:

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

可重用的缘故,这就变得更简单,当你有上NSArray类别来检索一个给定的类的对象:

@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 

现在您的代码可以是这样的:

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

像viewAtIndex这样的方法不存在吗? – alex 2010-12-20 02:23:14

+1

@alex如果您需要检索指定索引处的视图,则可以使用'[[view subviews] objectAtIndex:someIndex]' – 2010-12-20 02:29:01

+3

+1来解答此问题,因为这对于编写易用性的人来说是一个很好的解决方案需要功能的函数,而不需要调用类作为委托并提供它们自己的委托函数(在本例中为'alertViewShouldEnableFirstOtherButton:')。另外,如果你有多个按钮,并且需要一个特定的按钮,'if([((UIButton *)view).titleLabel.text isEqualToString:@“Middle Button”]'作为第二个if-check。 – joverboard 2012-06-07 14:25:37

0

从iOS 5开始,您可以在UIAlertViewDelegate实例中执行此操作。

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