我创建了一个UIAlertView
子类。它实现了两种UIAlertViewDelegate
方法:{}在预期时调用alertView:clickedButtonAtIndex:
,但永远不会调用alertViewShouldEnableFirstOtherButton:
。
看了一下相关的帖子并添加了:
[textField sendActionsForControlEvents:UIControlEventEditingChanged];
但没有结果。我似乎没有选择权。我在这里缺少什么?
@implementation MyAlertView
+ (MyAlertView*)showAlertForJson:(NSDictionary*)json delegate:(id<F2WebAlertDelegate>)delegate
{
MyAlertView* view = [[MyAlertView alloc] initWithJson:json delegate:delegate];
return view;
}
- (instancetype)initWithJson:(NSDictionary*)json delegate:(id<MyWebAlertDelegate>)delegate
{
if (self = [super initWithTitle:json[@"title"]
message:json[@"message"]
delegate:self
cancelButtonTitle:json[@"cancelTitle"]
otherButtonTitles:nil])
{
_json = json;
self.webDelegate = delegate;
for (NSString* title in json[@"otherTitles"])
{
[self addButtonWithTitle:title];
}
[self initInput:json[@"input"]];
[self show];
}
return self;
}
- (void)initInput:(NSDictionary*)json
{
if (json == nil)
{
return;
}
[json[@"style"] isEqualToString:@"plain"] ? self.alertViewStyle = UIAlertViewStylePlainTextInput : 0;
...
[self initTextField:[self textFieldAtIndex:0] withJson:json[@"field0"]];
if (self.alertViewStyle == UIAlertViewStyleLoginAndPasswordInput)
{
[self initTextField:[self textFieldAtIndex:1] withJson:json[@"field1"]];
}
}
- (void)initTextField:(UITextField*)textField withJson:(NSDictionary*)json
{
[textField sendActionsForControlEvents:UIControlEventEditingChanged];
if (textField == nil || json == nil)
{
return;
}
[json[@"keyboard"] isEqualToString:@"ascii"] ? (textField.keyboardType = UIKeyboardTypeASCIICapable) : 0;
...
}
#pragma mark - Alert View Delegate
- (void)alertView:(UIAlertView*)alertView clickedButtonAtIndex:(NSInteger)buttonIndex
{
...
}
- (BOOL)alertViewShouldEnableFirstOtherButton:(UIAlertView*)alertView
{
return YES;
}
@end
答案 0 :(得分:2)
事实证明,正如委托方法的名称所示,您必须为otherButtonTitles
的{{1}}指定一个列表UIAlertView
。
因此,稍后添加initWithTitle:message:delegate:cancelButtonTitle:otherButtonTitles:
的按钮不计算在内。