2

我正在使用带有 UITextView 子视图的 AlertView 来让用户回复我的应用程序中的帖子,但是我希望当用户键入的字符数超过字符限制时禁用警报的回复按钮。像这样禁用警报视图按钮会让我的应用程序被拒绝,有没有更好的方法来做到这一点?

-(void)textViewDidChange:(UITextView *)textView {
    if (!replyAlert) {
        return;
    }

    //character count
    replyAlert.title = [NSString stringWithFormat:@"Reply to Post (%i/250)", [textView.text length]];
    if ([textView.text length]>=250) {
        //disable alert view button
        for (UIView* view in [replyAlert subviews])
        {
            if ([[[view class] description] isEqualToString:@"UIAlertButton"])
            {
                UIButton *button = (UIButton*)view;
                if ([button.titleLabel.text isEqualToString:@"Reply"]) {
                    //disable
                    button.enabled = NO;
                }
            }
        }
    } else if ([textView.text length]==249) {
        //re-enable button if user deleted a character
        for (UIView* view in [replyAlert subviews])
        {
            if ([[[view class] description] isEqualToString:@"UIAlertButton"])
            {
                UIButton *button = (UIButton*)view;
                if ([button.titleLabel.text isEqualToString:@"Reply"]) {
                    //enable
                    button.enabled = YES;
                }
            }
        }
    }
}
4

1 回答 1

1

看看委托上的这个方法(UIAlertViewDelegate)

- (BOOL)alertViewShouldEnableFirstOtherButton:(UIAlertView *)alertView

假设您使用的是 UIAlertViewStylePlainTextInput (?),则每次用户在警报视图的文本字段中键入字符时都会调用此方法。因此,在这种方法中,您可以检查文本字段中文本的长度并相应地返回 TRUE/FALSE。

该方法也仅在 iOS 5.0 或更高版本中可用,如果支持旧版本,这可能是一个问题。

如果您将自己的文本字段作为子视图添加到警报视图,那么仅此一项就会导致应用程序被拒绝,因为它声明视图层次结构不会被操纵。如果您正在使用开箱即用的文本输入样式警报视图并且只是导航子视图以检查按钮标题并禁用它们,如果这导致拒绝,我会感到惊讶(注意这是一个主观意见)应用程序。

于 2012-08-11T02:41:20.117 回答