UIPopover 和传递数据 - 越来越近

Posted

技术标签:

【中文标题】UIPopover 和传递数据 - 越来越近【英文标题】:UIPopover and passing data - getting closer 【发布时间】:2012-07-13 17:25:12 【问题描述】:

我为自己设定了一个简单的挑战,我在许多应用程序中都看到了它,但我遇到了很多困难。

我的任务是拥有一个带有导航栏、按钮和标签的 ViewController。当您按下按钮时,会弹出一个带有新 ViewController 的 UIPopover,并且用户按下该弹出框内的按钮。当他们按下那个按钮时,我的 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!
        ;
 

我已经调试过了,当我在模拟器中关闭 Popover 时,Delegate 触发并且我调用 ViewController 中的字符串 mike 确实等于“Dismissed”。

我根本无法理解或发现的是如何从 popoverViewController 中调用/引用/触发 updateSomething() 方法。我看过许多使用 UIPopover 的人的例子,但似乎没有人在 Monotouch 中有这样做的例子,所有这些都在 Objective C 中。这是否意味着它不可能?还是只针对非常有经验的人?

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

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

谢谢

迈克

【问题讨论】:

【参考方案1】:

有很多方法可以解决这个问题。

这是最简单的:

向您的PopoverViewController 添加一个包含您的PopoverDelegate 的属性 从您的按钮单击处理程序中,调用YourNewProperty.updateSomething("peppers")

一般来说,为了解决此类问题,我使用了一个全局“信使”类。这允许其他控制器、委托、类等以全局方式订阅事件,并且必须知道它们来自哪里。这对 Apple 提出的这个疯狂版本的 MVC 真的很有帮助。

我使用的是 TinyIoC 中的那个,但要设置它有一点学习曲线:https://github.com/grumpydev/TinyIoC/blob/master/src/TinyIoC/TinyMessenger.cs

【讨论】:

感谢您的回复,但您的第一点是什么意思?您的意思是在 PopoverViewController 的构造函数中将 PopoverDelegate 作为参数传递吗?在我的 PopoverViewController 中,它不知道该类,所以我不能放 public PopoverDelegate YourNewProperty; 我是说让它可以“了解”其他类。以一种可以将一个传递给另一个的方式创建它们。

以上是关于UIPopover 和传递数据 - 越来越近的主要内容,如果未能解决你的问题,请参考以下文章

m基于大衍数无高阶环稀疏校验矩阵H构造算法和RMP消息传递的QC-LDPC性能matlab仿真

区块链作为“信任的机器”,将改变社会价值的传递方式

RESTful MySQL / 术语 / 传递参数 / 返回整数和双精度数

父组件向子组件传递数据

Java基础 | Java变量的特殊传递机制和实现细节

使用 Context API 传递数据时值未定义