MonoTouch.Dialog:如何为EntryElement设置字符数限制

4

我找不到如何限制 EntryElement 的字符数。

4个回答

9

我也喜欢继承和事件机制 :-) 试试这个:

class MyEntryElement : EntryElement {

    public MyEntryElement (string c, string p, string v) : base (c, p, v)
    {
        MaxLength = -1;
    }

    public int MaxLength { get; set; }

    static NSString cellKey = new NSString ("MyEntryElement");      
    protected override NSString CellKey { 
        get { return cellKey; }
    }

    protected override UITextField CreateTextField (RectangleF frame)
    {
        UITextField tf = base.CreateTextField (frame);
        tf.ShouldChangeCharacters += delegate (UITextField textField, NSRange range, string replacementString) {
            if (MaxLength == -1)
                return true;

            return textField.Text.Length + replacementString.Length - range.Length <= MaxLength;
        };
        return tf;
    }
}

请注意,还需要阅读Miguel的警告(编辑我的帖子):MonoTouch.Dialog:为EntryElement设置输入对齐方式


不错的发现,应该注意到ShouldChangeCharacters也作为委托属性公开了 :-) - Anuj
希望我们能尽早达到一个更.NET化的程度,让它们都以更加.NET的方式暴露出来 :-) - poupou
4
添加了CellKey的覆盖,否则在单元格回收期间它会将此NyEntryElements与其他内容混合。 - miguel.de.icaza
我该如何连接到上面自定义输入元素的ShouldChangeCharacters事件? - Goober

1

MonoTouch.Dialog 默认不包含此功能。最好的方法是复制并粘贴该元素的代码,然后将其重命名为 LimitedEntryElement。接着实现自己的 UITextField 版本(比如 LimitedTextField),覆盖 ShouldChangeCharacters 方法。最后在 "LimitedEntryElement" 中进行更改:

UITextField entry;

变成类似于:

LimitedTextField entry;

这真是让人头疼...为什么Miguel和他的团队没有选择基于事件的方法呢?所有事情都必须通过覆盖一些方法来完成...该死的。 - iLemming
1
我同意,这并不是很干净的代码。话虽如此,这实际上是一个在MonoTouch中延续的苹果模式。我建议提出增强请求,因为我几乎可以肯定我们不是唯一关注这个问题的人 :-P - Anuj
3
苹果的设计模式很糟糕。难怪有这么多人使用Monotouch。 - iLemming

0

我这样做:

myTextView.ShouldChangeText += CheckTextViewLength;

这个方法:
private bool CheckTextViewLength (UITextView textView, NSRange range, string text)
{
    return textView.Text.Length + text.Length - range.Length <= MAX_LENGTH;
}

0

我更喜欢以下方式,因为我只需要指定每个情况的字符数。在这个示例中,我设定为12个数字。

this.edPhone.ShouldChangeCharacters = (UITextField t, NSRange range, string replacementText) => {
    int newLength = t.Text.Length + replacementText.Length - range.Length;
    return (newLength <= 12);
};

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接