2012-10-02 1 views
4

J'essaie de définir le texte d'espace réservé pour un UITextField à une couleur différente. J'ai appris que j'ai besoin de sous-classer et de surcharger la méthode drawPlaceholderInRect.Sous-classement et substitution UITextField dans Monotouch

iPhone UITextField - Change placeholder text color

(void) drawPlaceholderInRect:(CGRect)rect { 
    [[UIColor blueColor] setFill]; 
    [[self placeholder] drawInRect:rect withFont:[UIFont systemFontOfSize:16]]; 
} 

Voici ce que j'ai jusqu'à présent, mais je ne peux pas comprendre comment l'obtenir juste. Je suis confus sur la dernière ligne car je ne sais pas comment mapper ceci aux objets MonoTouch/C#.

using System; 
using MonoTouch.UIKit; 
using MonoTouch.Foundation; 
using System.Drawing; 

namespace MyApp 
{ 
    [Register("CustomUITextField")] 
    public class CustomUITextField:UITextField 
    { 
     public CustomUITextField() :base() 
     { 

     } 

     public CustomUITextField (IntPtr handle) :base(handle) 
    { 

    }  

     public override void DrawPlaceholder (RectangleF rect) 
     {  

      UIColor col = new UIColor(0,0,255.0,0.7); 
      col.SetFill(); 
      //Not sure what to put here 
      base.DrawPlaceholder (rect);} 
    } 
} 
+0

Cette question a été répondu correctement. Voir le code de poupou ci-dessous et suivez la trace des commentaires pour plus de détails. – user1060500

Répondre

2

Le code ObjC original ne remet pas super (c'est la méthode de base), mais drawInRect:. Avez-vous essayé la même chose avec MonoTouch? par exemple.

public override void DrawPlaceholder (RectangleF rect) 
{ 
    using (UIFont font = UIFont.SystemFontOfSize (16)) 
    using (UIColor col = new UIColor (0,0,255.0,0.7)) { 
     col.SetFill(); 
     base.DrawString (rect, font); 
    } 
} 

Note: drawInRect:WithFont: cartes à la méthode d'extension DrawString en C# (qui peut être appelé à tout string).

+0

Merci. Je vais essayer cela et vous le faire savoir. Vous avez résolu la pièce manquante du puzzle je pense, qui était je ne savais pas quoi drawInRect: WithFont: mappé à. Maintenant que je sais, je vais essayer. – user1060500

+0

J'ai essayé ceci. Et je peux faire fonctionner mon code. Le point d'arrêt est en cours d'exécution lorsque le contrôle est instancié. Le problème est que ça ne fait rien. Le contrôle ne se met jamais à jour quoi que je fasse. Le texte d'espace réservé n'est pas affiché. J'ai essayé de changer la couleur d'arrière-plan du contrôle, et le code est touché, mais rien ne change dans l'interface utilisateur ... hmmm des pensées? En XCode, j'ai défini la classe à ma classe personnalisée. donc pas de problème là (plus le point d'arrêt est touché). – user1060500

+0

J'ai traduit le code ObjC que vous avez fourni à C# mais je ne l'ai pas essayé (pas dans ObjC/Xcode ou C#/MonoTouch). Cependant, à partir du lien d'origine, il semble que cela ne fonctionne pas pour tout le monde. Si vous avez un exemple de travail dans ObjC, alors déposez un rapport de bogues http://bugzilla.xamarin.com et incluez-le, ainsi que votre port C#, et nous l'examinerons. – poupou