【问题标题】:Perform a segue from a UITableView to a new view controller Xamarin执行从 UITableView 到新视图控制器 Xamarin 的 segue
【发布时间】:2018-02-20 10:59:04
【问题描述】:

我有一个 Xamarin.iOS 应用程序,其中包括一个导航控制器,其中视图控制器 ViewController.cs 中的根在 UIViewController(在单个视图应用程序中创建的默认值)是一个表视图,它与新的视图控制器。

在下面的故事板中描述。

表格视图由继承自UITableViewSourceStationsTableViewSource.cs 代码控制。表视图的源设置在ViewController.cs 内。

StationsTable.Source = new StationsTableViewSource(StationPlayer.StationsTitleList)

当我在表格视图中按下一个单元格时,我想继续使用新的视图控制器,但正如我所见:

  1. 我无法从表视图访问父/根/包含视图控制器
  2. 我无法从表视图访问新视图控制器。

我的问题是,通过上述设置,如何从嵌套在视图控制器中的表格视图中的单元格执行转场到另一个视图控制器?

请更正术语 - Xamarin/iOS 术语不要太热。

谢谢大家。

【问题讨论】:

    标签: c# ios uitableview xamarin xamarin.ios


    【解决方案1】:

    首先,我们需要弄清楚你创建了哪个segue?

    1.从你的 tableViewCell 到一个新的 ViewController。

    这意味着:点击Cell + ctrl 并拖动到新的 ViewContoller。这样就不需要手动执行PerformSegue()了。当您单击 Cell 时,它将推送到新的 Controller。

    2.从你的 ViewContoller 到一个新的 ViewController

    这意味着:点击 ViewContoller + ctrl 的底部栏并拖动到新的 ViewController。这样,我们需要点击我们上面创建的segue然后设置Identifier。当我们点击 Cell 时,会触发下面的事件:

    public override void RowSelected(UITableView tableView, NSIndexPath indexPath)
    {
        //use this method we can push to a new viewController
        //the first parameter is the identifier we set above
        parentVC.PerformSegue("NewPush", indexPath);
    }
    

    我无权访问父/根/包含视图控制器 表格视图

    当你构造这个 Source 时,你可以像这样传递你的“父”视图控制器:

    ViewController parentVC;
    //You can add other parameters you want in this initial method
    public MyTableViewCellSource(ViewController viewController, ...)
    {
        parentVC = viewController;
    }
    

    此外,两个 segues 都会在父 ViewController 中触发 PrepareForSegue()。在这种方法中,您可以将参数传递给新的 ViewController:

    public override void PrepareForSegue(UIStoryboardSegue segue, NSObject sender)
    {
        if (segue.Identifier == "NewPush")
        {
            SecondVC secondVC = segue.DestinationViewController as SecondVC;
            ...//do some configuration
        }
    }
    

    关于如何使用segue,你可以阅读this official documentation了解更多详情。

    【讨论】:

    • 感谢@land-lu-msft - 只是快速跟进。使用上面的方法 1. 我应该能够单击表格视图中的任何单元格/行并继续使用新的视图控制器而无需更多代码?方法 1 仍然会触发 PrepareForSegue 方法然后进行 segue 那么为什么选择使用方法 2 并传递对 Source ViewController 对象的引用呢? - 您认为最佳做法是什么?
    • 这是使用segue的两种方式。它没有最好的,一切都取决于你的选择。第二种方法可以更加灵活。假设一个场景,如果我们也想使用一个按钮推送到同一个 VC,我们也可以使用这个 segue 而不是创建一个新的。唯一的区别是 segue 的发送者(谁触发它)。而且关于push,我们也可以用code,就看你了。
    • 这很好用!将选定单元格的数据传递给 segue 上的新控件的最佳方法是什么?假设表格单元格显示了一个 ListItem 对象。我如何将正确的 ListItem 对象传递给新控制器(比如详细视图)?
    猜你喜欢
    • 1970-01-01
    • 2012-06-02
    • 1970-01-01
    • 2015-02-16
    • 1970-01-01
    • 2016-12-31
    • 1970-01-01
    • 2011-06-05
    • 1970-01-01
    相关资源
    最近更新 更多