4

私は非常に熟練したWindows.NETのバックグラウンドを持っており、Monotouchを使用していますが、イベントへの対応方法について非常に混乱しています。私は物事をシンプルに保つのが好きで、Montouchのチュートリアルを読み、例を見てきました。私が混乱しているのは、イベントへの対応方法です。

UIButtonとUILabelが付いたViewControllerがあるとします。ボタンを押すと、ラベルを「クリックボタン」に変更したい。

したがって、私は次のことを行うことができます:

public override void ViewDidLoad () {
     base.ViewDidLoad ();
     this.btnClickMe.TouchUpInside += (sender, e) => {
         this.lblOutput.Text = "Clicked @ " + DateTime.Now.ToShortTimeString ();
}

または、代わりに、NavigationBarsなどで押されたボタンに応答する場合に役立つと思うこのアプローチを使用することもできます。IBでは、Ctrlキーを押しながらドラッグしてアクションを作成します。次に、[Action]メソッドを.csファイルに移動して、次の手順を実行します。

[Action ("btnClickMe_TouchUpInside:")]
public void btnClickMe_TouchUpInside (NSObject sender)
{
    this.lblOutput.Text = "Clicked @ " + DateTime.Now.ToShortTimeString ();
}

私にとってそれをより混乱させるのは、いくつかのUIコンポーネントに.delegateメンバーがあることです。イベントを追加できます。

最善の方法は何ですか、それとも私は完全に混乱していますか?もしそうなら、あなたは私がベストプラクティス、正しいアプローチなどを学ぶことができる場所に私を導くことができるリンクがあります。

どうもありがとう

マイク

4

1 に答える 1

5

良い紹介として、イベント、プロトコル、およびデリゲートに関するXamarinの記事をお勧めします。

アクションアウトレットを接続するか、イベントを参照アウトレットにフックするかという質問に関しては、次のように述べています。

target-actionsとは対照的に.NETイベントを使用する主な違いは、後者では複数のコントロールを単一のアクションメソッドに接続できることです。

したがって、すばやく汚い計算機を作成していて、0〜9の数字を押すとすべて同じことを行う場合は、アクションアプローチを使用する傾向があるかもしれません。ボタンから数字を読み取るだけです。(VBを使用してコントロールアレイを作成したことがある場合は、この手法に精通している可能性があります。)

そうは言っても、私の個人的な好みはリファレンスアウトレットに固執することだと思います。MonoDevelopとInterfaceBuilderの間で、考えたり行ったりする必要が少なくなります。UISliderをドロップして参照すると、コードからそのすべてのプロパティとイベントにアクセスできます。したがって、後で何かをフックすることは、コードから実行できます。多くの開発者は、IBの使用をやめる傾向があるとコメントしています...

事実に戻ると、MonoTouchはUIと対話するための複数の冗長な方法を提供します。Objective-Cから来た人には、おなじみの「Objective-Cデリゲート」と「セレクター」への参照があります。C#から来ているので、これらのアプローチを無視できることがよくあります。ただし、Appleのドキュメントで使用されている言語に慣れるために、時間をかけてその記事を読む必要があります。たとえば、「Objective-Cデリゲート」と「C#デリゲート」の違いに注意することが重要です。

デリゲートは、.NETがイベントを使用するのと同じように、iOSのコールバックに使用されます。iOS APIとObjective-Cデリゲートの使用方法を.NETのように見せるために、MonoTouchはiOSでデリゲートが使用される多くの場所で.NETイベントを公開します。

やがて、APIは柔軟で.NETパターンに対応できるようになると思います。NSタイプと.NETタイプの間の変換は、多くの場合透過的です(たとえば、ラムダ式からNSActionへ)。

より具体的な情報が必要な場合はお知らせください。乾杯。

于 2012-07-12T21:23:03.943 に答える