0

重複の可能性:
Monotouch での UITextField のサブクラス化とオーバーライド

そのため、私は MonoTouch を使用しており、基本的に多くの Obj-C コードを MonoTouch に変換しようとしています。問題は、MonoTouch が多くのことについて十分に文書化されていないことです (または、少なくとも私はそれを見つけることができません)。

私のフォーム (ええ、私はまだフォームと呼んでいます) には、プレースホルダー テキストを含む UITextField があります。CustomUITextField であるカスタム クラスを指定するまでは、美しく動作します。(下記参照)。

問題は、ブレークポイントが表示されている画面をロードすると、ブレークポイントがヒットすることです。しかし、何もしません。base.DrawPlaceholder(rect); を呼び出しても、プレースホルダーはもう表示されません。オーバーライド メソッドから。base.DrawPlaceholder(rect); を呼び出すことでそれが期待できます。少なくとも、プレースホルダー テキストを表示するデフォルトの機能を取得します (これは、カスタム クラスを使用せずに動作します - テスト済み)。

このカスタム クラスを引き続き使用し、オーバーライドする DrawPlaceholder メソッドを実装から削除すると、標準のプレースホルダー テキストが正常に表示されます。DrawPlaceholder をオーバーライドしてから base.DrawPlaceholder(rect); を呼び出すのとは、一体どのような違いがあるのでしょうか。それは同じことです。

ここで私が間違っていることを誰かが知っていますか? 私は夢中になります...

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()
        {
            this.BackgroundColor=UIColor.Black;
        }

        public override void DrawPlaceholder (RectangleF rect)
        {       
            this.BackgroundColor=UIColor.Black;
            base.DrawPlaceholder(rect);

            //UIColor col = new UIColor(0,0,255,0);
            //col.SetFill();
            //this.DrawString ("Title",rect, this.Font);
        }

        public override void DidChange (NSKeyValueChange changeKind, NSIndexSet indexes, NSString forKey)
        {

            base.DidChange (changeKind, indexes, forKey);
        }

        public override void DidChangeValue (string forKey)
        {
            base.DidChangeValue (forKey);
            this.Text="";
        }
    }
}
4

0 に答える 0