11

iOSアプリのUITextFieldに入力できる文字数を25文字までに制限したいです。

この投稿によると、次のように Objective-C で実行できます。

- (BOOL)textField:(UITextField *)textField shouldChangeCharactersInRange:(NSRange)range replacementString:(NSString *)string {
    NSUInteger newLength = [textField.text length] + [string length] - range.length;
    return (newLength > 25) ? NO : YES;
}

Xamarin.iOS を使用して C# でこれとまったく同じことを行うにはどうすればよいですか?

4

5 に答える 5

2

この問題に 2 日間取り組んだ後、自分で解決策を見つけました。コピー/貼り付けのケースで動作しています。それが役に立つことを願っています。

public static bool CheckTexfieldMaxLength (UITextField textField, NSRange range, string replacementString, int maxLength)
    {

        int maxLength = 10;
        int newLength = (textField.Text.Length - (int)range.Length) + replacementString.Length;
        if (newLength <= maxLength) {
            return true;
        } else {
            if (range.Length == 0 && range.Location > 0 && replacementString.Length > 0 && textField.Text.Length >= maxLength)
                return false;

            int emptySpace = maxLength - (textField.Text.Length - (int)range.Length);

            textField.Text = textField.Text.Substring (0, (int)range.Location)
            + replacementString.Substring (0, emptySpace)
            + textField.Text.Substring ((int)range.Location + (int)range.Length, emptySpace >= maxLength ? 0 : (maxLength - (int)range.Location - emptySpace));
            return false;
        }
    }
于 2016-01-19T15:53:30.633 に答える
1

回答されてから本当にしばらく経ちましたが、これは良い解決策ですが、を使用して別の方法で実現できますNotificationCenter。このようにして、コールバックを追加して、小さなコンポーネントのように別のクラスで動作させることもできます。

他の誰かを助けることができる場合に備えて、ここに追加しています。

NSNotificationCenter.DefaultCenter.AddObserver(
        UITextField.TextFieldTextDidChangeNotification, TextChangedEvent);

private void TextChangedEvent(NSNotification notification) {
    UITextField field = (UITextField)notification.Object;
    if (notification.Object == field) {             
        if (field.Text.Length >= 25) {
            field.Text = field.Text.Substring (0, 24);
        }
    }
}
于 2015-11-06T17:30:16.310 に答える