そのため、私は 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="";
}
}
}