Xamarin.ios UIPopover和传递数据-越来越近

Xamarin.ios UIPopover和传递数据-越来越近,xamarin.ios,uipopovercontroller,Xamarin.ios,Uipopovercontroller,我给自己设置了一个简单的挑战,我在很多应用程序中都看到了这一点,我遇到了很多困难 我的任务是拥有一个带有导航栏、按钮和标签的ViewController。当您按下按钮时,一个UIPopover弹出一个新的ViewController,用户按下该popover内的一个按钮。当他们按下该按钮时,我的ViewController可以将该信息用于某些用途。就这样。简单 因此,我的父视图控制器设置为: UIViewController popOverViewController = new PopOver

我给自己设置了一个简单的挑战,我在很多应用程序中都看到了这一点,我遇到了很多困难

我的任务是拥有一个带有导航栏、按钮和标签的ViewController。当您按下按钮时,一个UIPopover弹出一个新的ViewController,用户按下该popover内的一个按钮。当他们按下该按钮时,我的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!
        };
 }
我已经调试过,当我在模拟器中关闭Popover时,代理将启动,并且调用ViewController中的字符串mike等同于“已关闭”

我无法理解或了解的是,如何从popoverViewController调用/引用/激发UpdateMething()方法。我看过很多人使用UIPopover的例子,但似乎没有人在Monotouch中有这样做的例子,都是在Objective C中。这是否意味着这不可能?还是只适合经验丰富的人

老实说,我认为Monotouch比Objective C更容易,因为我是一名经验丰富的C#开发人员,但目前我认为学习Objective C更容易

我希望有人能帮助我,因为我感到非常困惑/沮丧

谢谢


迈克

解决这个问题的方法有很多

以下是最简单的:

  • 将包含
    PopoverDelegate
  • 从按钮单击处理程序中,调用
    YourNewProperty.UpdateMething(“peppers”)
一般来说,为了解决这些问题,我使用了一个全局“messenger”类。这允许其他控制器、委托、类等以全局方式订阅事件,并且需要知道它们来自何处。苹果公司推出的这个疯狂的MVC版本真的很有帮助


我用的是TinyIoC的,但它有一点学习曲线需要设置:

谢谢你的回答,但你的第一点是什么意思?您的意思是将PopoverDelegate作为参数传入PopoverViewController的构造函数中吗?在我的PopoverViewController中,它不知道该类,因此我不能将公共PopoverDelegate放入YourNewProperty;我是说让它“知道”另一门课。以一种可以传递给另一个的方式创建它们。