alertViewShouldEnableFirstOtherButton in UIAlertView subclass not called

本秂侑毒 提交于 2019-12-13 04:52:54

问题


I made a UIAlertView subclass. It implements two UIAlertViewDelegate methods: alertView:clickedButtonAtIndex: is called when expected, however alertViewShouldEnableFirstOtherButton: is never called.

Had a look at related posts and added:

[textField sendActionsForControlEvents:UIControlEventEditingChanged];

but without results. I seem to be out of options. What am I missing here?

@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:


Turns out that, as the delegate method's name suggest, you must specify a list otherButtonTitles to UIAlertView's initWithTitle:message:delegate:cancelButtonTitle:otherButtonTitles:.

So, buttons added later with addButtonWithTitle: do not count.



来源:https://stackoverflow.com/questions/20499465/alertviewshouldenablefirstotherbutton-in-uialertview-subclass-not-called

易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!