在uialertview中启用按钮的属性

ale*_*lex 2 iphone objective-c

我用两个按钮和一个文本字段创建一个uialertview,如果textfield为空,我想要禁用"Ok"按钮.如何获取uibutton对象,更改是启用状态.

Jac*_*kin 11

您可以使用enabledUIControl以下继承的属性:

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

为了可重用性,当您有一个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
Run Code Online (Sandbox Code Playgroud)

您的代码现在看起来像这样:

[[alertView.subviews objectsOfClass:[UIButton class]] enumerateObjectsUsingBlock:^(UIButton *obj, NSUInteger index, BOOL *stop) {
    obj.enabled = NO;
}];
Run Code Online (Sandbox Code Playgroud)

  • 这个答案的+1是一个很好的解决方案,对于那些编写易于使用的函数而不需要调用类作为委托并提供自己的委托函数(在这种情况下为`alertViewShouldEnableFirstOtherButton:`)的人来说,这是一个很好的解决方案.另外,如果你有多个按钮并需要一个特定的按钮,`if([((UIButton*)视图).titleLabel.text isEqualToString:@"Middle Button"]`做出第二次if-check. (3认同)