Monotouch:将数据发送回堆栈到另一个ViewController
本文关键字:堆栈 另一个 ViewController 数据 Monotouch | 更新日期: 2023-09-27 18:09:00
我有一个关于Monotouch的问题。
的情况:我有2个视图控制器。第一个(让我们称之为VC-A)看起来类似于联系人编辑屏幕,这意味着它有一个TableView与多个section每个包含按钮和文本字段。现在,当用户单击这些按钮中的一个时,他将到达第二个ViewController (VC-B),它显示一个包含来自数据库的数据的TableView。当用户单击这些行中的任何一行时,VC-B将被关闭,我想显示所选择的数据库条目(字符串)作为按钮的标题(在VC-A中),它首先打开了VC-B。
当我去年做一个objective-C项目时,我设法通过使用委托将数据发送回堆栈,但我还没有找到在Monotouch中如何工作的方法。
我在这里读了几个关于使用AppDelegate或使用单例的问题,但我不确定这是从子视图返回数据的正确方式。
你可以复制委托模式。添加一个c#委托到你的VC-B,它接受一个参数,一些数据结构。在VC-B的"ViewWillDisappear
"中,调用委托,如果它不是空的,并将数据传递给它。这样,调用VC可以访问数据,但不需要两个控制器之间的紧密耦合。它所要做的就是在VC-B中注册一个委托方法。
由于MonoTouch是。net 4,您可以使用Func<MyDataStructure>
或Action<MyDataStructure>
,而不需要使用完整的限定委托类型
我有一个静态单例类,我用它来存储关于我的应用程序的"状态"类型的数据-当前设置和选择需要在应用程序的许多不同的地方。这是一种方法来实现这个
你也可以在创建VC-B时将VC-B的引用传递给VC-A,这样它就可以显式地访问它的父视图并以这种方式传递值。
我实际上更喜欢使用TinyMessenger跨容器调用,我发现这是非常非常有用的,当你不想保持引用你的沉重的视图控制器周围,这可能会导致内存泄漏!
var messageHub = new TinyMessengerHub();
// Publishing a message is as simple as calling the "Publish" method.
messageHub.Publish(new MyMessage());
// We can also publish asyncronously if necessary
messageHub.PublishAsync(new MyMessage());
// And we can get a callback when publishing is completed
messageHub.PublishAsync(new MyMessage(), MyCallback);
// MyCallback is executed on completion
https://github.com/grumpydev/TinyMessenger