2011-11-29 39 views

回答

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; 
    } 
} 

也讀米格爾的警告(編輯到我的文章)在這裏:MonoTouch.Dialog: Setting Entry Alignment for EntryElement

+0

好的趕上,應該已經注意到ShouldChangeCharacters也作爲委託屬性公開:-) – Anuj

+0

希望我們能夠到達的一刻,早晚在哪裏他們都暴露在更多.NET-ish方式:-) – poupou

+4

爲CellKey添加了覆蓋,否則在細胞回收過程中它會將此NyEntryElements與其他組件混合。 –

1

MonoTouch.Dialog不具備此功能默認情況下出爐英寸您最好的選擇是複製並粘貼該元素的代碼,並將其重命名爲像LimitedEntryElement。然後實現自己版本的UITextField(類似於LimitedTextField),它重寫ShouldChangeCharacters字符方法。然後在 「LimitedEntryElement」 變化:

UITextField entry; 

喜歡的東西:

LimitedTextField entry; 
+0

這是一個頭痛......爲什麼米格爾和傢伙沒有選擇基於事件的方法?一切都必須通過重寫一些方法來完成......補充它 – Agzam

+1

我同意,它不完全乾淨。這就是說,它實際上是在MonoTouch中傳播的Apple模式。我會提出一個改進請求,因爲我幾乎可以肯定,我們並不是唯一有這方面擔憂的兩個人:-P – Anuj

+3

好吧,Apple模式很吸引人。難怪爲什麼這麼多人使用monotouch – Agzam

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); 
}; 
相關問題