不调用UIAlertView子类中的alertViewShouldEnableFirstOtherButton

时间:2013-12-10 16:12:26

标签: ios iphone objective-c uialertview

我创建了一个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

1 个答案:

答案 0 :(得分:2)

事实证明,正如委托方法的名称所示,您必须为otherButtonTitles的{​​{1}}指定一个列表UIAlertView

因此,稍后添加initWithTitle:message:delegate:cancelButtonTitle:otherButtonTitles:的按钮不计算在内。