Warning: file_get_contents(/data/phpspider/zhask/data//catemap/0/assembly/6.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
UITextField最大长度(以C#为单位,带Xamarin.iOS)_C#_Xamarin.ios_Xamarin - Fatal编程技术网

UITextField最大长度(以C#为单位,带Xamarin.iOS)

UITextField最大长度(以C#为单位,带Xamarin.iOS),c#,xamarin.ios,xamarin,C#,Xamarin.ios,Xamarin,我想将iOS应用程序中可输入UITextField的字符数限制为25个字符 根据,可以在Objective-C中这样做: - (BOOL)textField:(UITextField *)textField shouldChangeCharactersInRange:(NSRange)range replacementString:(NSString *)string { NSUInteger newLength = [textField.text length] + [string l

我想将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;
}

我如何在C#中使用Xamarin.iOS做同样的事情?

这还没有经过测试,但我相信它可能会起作用:

UITextField myField;
myField.ShouldChangeCharacters = (textField, range, replacementString) => {
    var newLength = textField.Text.Length + replacementString.Length - range.Length;
    return newLength <= 25;
};
UITextField-myField;
myField.ShouldChangeCharacters=(文本字段、范围、替换字符串)=>{
var newLength=textField.Text.Length+replacementString.Length-range.Length;

return newLength我用委托而不是lamba表示法来完成它:

UITextField myField;
myField.ShouldChangeCharacters = new UITextFieldChange(delegate(UITextField textField, MonoTouch.Foundation.NSRange range, string replacementString) {
    int newLength = textField.Text.Length + replacementString.Length - range.Length;
    return newLength <= 25;
});
UITextField-myField;
MyFieldUrdCuxErrime=新UITExtFieldChchange(委托(UITExtFieldTetryField.Positual.NasRealString,String ReaPrimeString){
int newLength=textField.Text.Length+replacementString.Length-range.Length;

return newLength这是一个很好的解决方案,但是它可以通过使用
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);
        }
    }
}

在处理这个问题两天后,我自己找到了解决方案。它正在处理复制/粘贴案例。希望它会有用

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;
        }
    }
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 0&&replacementString.Length>0&&textField.Text.Length>=maxLength)
返回false;
int-emptySpace=maxLength-(textField.Text.Length-(int)range.Length);
textField.Text=textField.Text.Substring(0,(int)range.Location)
+replacementString.Substring(0,清空空间)
+textField.Text.Substring((int)range.Location+(int)range.Length,emptySpace>=maxLength?0:(maxLength-(int)range.Location-emptySpace));
返回false;
}
}

我的解决方案正在使用EditingChange事件:

_myUTextField.EditingChanged += (sender, e) =>{
   if (_myUTextField.Text.Length > maxLength){
      _myUTextField.Text = _myUTextField.Text.Substring(0, _myUTextField.Text.Length - 1);
   }
};

对于UITextView ShouldChangeText事件,它使用的代码与上面相同。这需要位于Google的顶部。必须进行一些挖掘。谢谢Rolf。效果很好。完美。谢谢,它工作得非常好,当您需要ShouldChangeCharacters用于其他用途时,它非常有用。不幸的是,此解决方案无法用于粘贴内容