【问题标题】:How can a viewcontroller findout what viewcontroller called it?视图控制器如何找出视图控制器的名称?
【发布时间】:2013-03-30 21:26:22
【问题描述】:

我有一个名为 ReadingMaintView 的 tableviewcontroller。每行都有一个标签和一个数据收集控件,例如阅读日期有一个文本字段。为了允许用户使用他们的拇指滚动日期选择器来选择他们想要放置到阅读日期文本字段中的日期,我有另一个名为 AccessoryViewController 的 ViewController。这个视图上的所有内容都是一个日期选择器。当用户触摸accessorydetails 按钮时,我有一个启动AccessoryViewController 的segue。这样用户就可以选择他们想要的日期。

现在,我希望任何 Viewcontroller 都能够调用 AccessoryViewController 到它需要的日期。这意味着 AccessoryViewController 需要知道调用 ViewController 的名称,以便它可以返回。我怎样才能做到这一点 ?我在 ReadingMaintView 中设置了 segue 准备,当我触摸附件按钮时它会触发。但是我必须在 AccessoryViewController 中做什么来检索被调用的名称(在本例中为 ReadingMaintView)来执行回调?

【问题讨论】:

    标签: c# xamarin.ios xamarin


    【解决方案1】:

    每个UIViewController 都有一个ParentViewController 类型为UIViewController 的属性。或者,如果您在层次结构中处于低位,您可以获取UIWindowRootViewController 并使用ChildViewControllers 向下工作。

    另外,我可能误解了您的用例,但您似乎只需要致电UIViewController.PerformSegue(String identifier)

    【讨论】:

    • 谢谢拉里。我要试试你的 PerformSegue 想法。
    【解决方案2】:

    如果我理解您的问题,这里有一些建议。将ReadingMainView 作为AccessoryViewController 的构造函数中的参数传递

    public class AccessoryViewController : UIViewController {
        public AccessoryViewController(UIViewController parent) {}
    }
    

    (编辑:@LarryOBrian 当然是正确的。这已经由ParenViewController 属性处理,所以这不是一个很好的建议......)

    或者让你的AcessoryViewController 发出一个事件,控制器启动它可以注册一个事件处理程序

    // Somewhere in ReadingMaintView
    var accessoryViewController = new AccessoryViewController();
    accessoryViewController.ActionCompleted += (eventArgs) => {}
    

    【讨论】:

    • 嗯...我明白你的意思了。我会试一试的。
    • 我实际上非常喜欢发出一个可以做出反应的事件的想法:一般来说,发出一个事件并让事物做出反应比尝试“推送”状态更强大。
    猜你喜欢
    • 1970-01-01
    • 2010-12-11
    • 1970-01-01
    • 1970-01-01
    • 2014-06-11
    • 2023-03-29
    • 1970-01-01
    • 2011-06-26
    • 1970-01-01
    相关资源
    最近更新 更多