【问题标题】:Xamarin iOS Unwind Segue or DismissViewController programmatically and pass back dataXamarin iOS 以编程方式展开 Segue 或 DismissViewController 并传回数据
【发布时间】:2015-02-20 02:42:53
【问题描述】:

我在故事板中创建了一个转场。这是一个模态转场,我给了它一个 LoginSegue 的标识符。

在我的控制器中,我这样做:

PerformSegue("LoginSegue", this);

一切都好。新控制器按预期出现。

要返回调用视图,我可以通过将按钮连接到调用控制器中的展开转场来使用展开转场。这很好用。

或者我可以调用(来自代码):

DismissViewController(true, null);

问题是我想传回一些数据。

ParentViewController 为空。

在返回调用视图之前,我确实需要进行一些验证,因此不能从按钮自动展开。

   [Action("UnwindToCaller:")]
   public void UnwindToCaller(UIStoryboardSegue seque)
   {
       var loginViewController = (LoginViewController)seque.SourceViewController;
       var data = loginViewController.getData();
       Console.WriteLine("Unwind to Caller Here.");
   }

我似乎也找不到一种方法来给 unwind segue 一个故事板 ID。

如果我可以从代码中执行 unwind segue,一切都会很好,或者如果我可以使用 DismissViewController 将一些数据传回,那也很好。

同样,这似乎是一件很常见的事情。

【问题讨论】:

  • 如果单击窗口左侧场景列表中的 segue,则可以使用属性检查器为其指定标识符。您可以使用 prepareForSegue 通过展开将数据发送回初始控制器,就像您为前向 segue 所做的那样。
  • 忘了说。我正在使用 Visual Studio。我没有看到“场景列表”。我可以在情节提要和文档大纲中看到我所有的 push segue(并给它们提供标识符),而不是 unwind segue。
  • “LoginSegue”是模态的segue吗?如果是这种情况,请尝试检查登录控制器上“PresentingViewController”属性的值。

标签: c# ios xamarin storyboard segue


【解决方案1】:

好的,找到了解决方案。希望这对其他人有帮助。

所以在我的调用视图控制器中,当我 PrepareForSegue 时,我将一个引用传递给调用视图控制器。然后我有一个从模态视图调用的方法。

这是 Xamarin 参考:http://developer.xamarin.com/recipes/ios/general/storyboard/storyboard_a_tableview/

public override void PrepareForSegue(UIStoryboardSegue segue, NSObject sender)
   {
       if (segue.Identifier == "LoginSegue")
       {
           var destCtrl = segue.DestinationViewController as LoginViewController;
           if (destCtrl != null)
           {
               // pass in a reference to THIS view controller.
               destCtrl.SetData(this);
           }
       }
       base.PrepareForSegue(segue, sender);
   }

也在调用视图控制器中

   public void LoggedIn (string someFlag)
   {
       Console.WriteLine("Logged in with : " + someFlag);
       DismissViewController(true, null);
   }

还有 LoginViewController

public void SetData (CallingViewController callingCtrl)
    {
        calllingViewController = callingCtrl;
    }

然后当我准备好返回时。

callingViewController.LoggedIn("the flag"); 

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2012-10-13
    • 2018-04-05
    • 2015-08-19
    • 2017-05-07
    相关资源
    最近更新 更多