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 に答える