0

私は自分自身に簡単な課題を設定しました。これは多くのアプリで見られますが、非常に困難です。

私の仕事は、ナビゲーション バー、ボタン、およびラベルを備えた 1 つの ViewController を持つことです。ボタンを押すと、UIPopover が新しい ViewController でポップアップし、ユーザーはその popover 内のボタンを押します。彼らがそのボタンを押すと、ViewController はその情報を何かに使用できます。それでおしまい。単純?

したがって、私の親 ViewController は次のように設定されています。

UIViewController popOverViewController = new PopOverViewController ();
PopoverDelegate _popoverDelegate;  

public override void ViewDidLoad () {
    base.ViewDidLoad ();
    BarButtonItemPopover = new UIPopoverController (popOverViewController);
    BarButtonItemPopover.PopoverContentSize = new SizeF (320, 320);
    _popoverDelegate = new PopoverDelegate();
    BarButtonItemPopover.Delegate = _popoverDelegate;
}

public class PopoverDelegate : UIPopoverControllerDelegate {
     public PopoverDelegate() { }

     public override void DidDismiss (UIPopoverController controller) {
           string mike = "Dismissed";
     }

     public void updateSomething(string someData) {
           // When the user clicks in my popOverViewController I want to come
           // here and do something.  I will then dismiss the popover here.
           string mike = someData;
     }
}

私の popOverViewController は UIViewController として設定され、その上に btnClickMe と呼ばれるボタンがあり、重要な部分は次のとおりです。

 public override void ViewDidLoad () {
      base.ViewDidLoad ();
      this.btnClickMe.TouchUpInside += (s, e) => {
            Console.WriteLine("");
             // When I'm clicked I want to send some 
             // data to the updateSomething("hello world") method
             // in the ViewController that crated me! Help!
        };
 }

私はデバッグし、シミュレーターでポップオーバーを閉じると、デリゲートが起動し、呼び出し元の ViewController の文字列マイクが「破棄」されます。

私が単に理解したり見つけたりできないのは、popoverViewController から updateSomething() メソッドを呼び出し/参照/起動する方法です。私は UIPopover を使用している人々の例を数多く見てきましたが、Objective C の Monotouch でこれを行う例は誰もないようです。これは不可能ということですか? それとも経験者限定ですか?

正直なところ、私は経験豊富な C# 開発者なので、Objective C よりも Monotouch の方が簡単だと思っていましたが、現時点では、Objective C を学ぶ方が簡単だと思います!!

私は非常に混乱/欲求不満になっているので、誰かが私を助けてくれることを願っています.

ありがとう

マイク

4

1 に答える 1

1

この問題を解決するには多くの方法があります。

これが最も簡単です:

  • PopoverViewControllerあなたを含むプロパティをあなたに追加しますPopoverDelegate
  • ボタンクリックハンドラーから、呼び出しますYourNewProperty.updateSomething("peppers")

このような一般的な問題を解決するために、私はグローバルな「メッセンジャー」クラスを使用します。これにより、他のコントローラー、デリゲート、クラスなどがグローバルな方法でイベントをサブスクライブできるようになり、それらがどこから来たのかを必ず知る必要があります。これは、Apple が思いついたこのクレイジーなバージョンの MVC に本当に役立ちます。

私は TinyIoC のものを使用していますが、セットアップには少し学習曲線があります: https://github.com/grumpydev/TinyIoC/blob/master/src/TinyIoC/TinyMessenger.cs

于 2012-07-13T18:04:18.090 に答える