【问题标题】:How to pass object using segue如何使用 segue 传递对象
【发布时间】:2016-05-04 19:58:03
【问题描述】:

我携带一个带有对象集合的 uitableview。 当我点击一个 UITableViewCell 打开另一个 UIView。 但我想为这个新的 UIView 发送 UITableViewCell 中的对象并在那里显示它们的详细信息。 我跟着回答这个问题以加载另一个视图:ViewController Segue Xamarin 如果有人提供帮助,我将不胜感激

【问题讨论】:

标签: c# ios uitableview uiview xamarin


【解决方案1】:

有几个解决方案,第一个是使用 prepareForSegue(_:sender:) 方法:

讨论 这个方法的默认实现什么都不做;你 可以覆盖它以将相关数据传递给新的视图控制器或 窗口控制器,基于 segue 的上下文。转场对象 描述转换并包括对两个控制器的引用 参与了segue。

可以从多个来源触发 Segue,因此请使用以下信息 在 segue 和 sender 参数中区分不同的 应用程序中的逻辑路径。例如,如果 segue 源自 表格视图,发送者参数将标识用户的单元格 点击。您可以使用该信息在 目标视图控制器。

在这种情况下,您需要“保存”一个您想在 didSelectRow 中传递的对象:

- (void)tableView:(UITableView *)tableView didSelectRowAtIndexPath:(NSIndexPath *)indexPath {
   self.currentObjectToPass = .. some object from array or somewhere else..
}

然后设置为下一个vc:

- (void)prepareForSegue:(UIStoryboardSegue *)segue sender:(UIButton*)sender {
    if ([segue.identifier isEqualToString:@"bookingDetailsSegue"]) {
        self.nextVC = segue.destinationViewController;
        self.nextVC.objectToPass = self.currentObjectToPass;
    }
}

另一种方式是拒绝使用segue,通过storyboardID获取vc。

这种方式你需要 instanceViewController(withIdentifier:) 方法:

返回值 指定对应的视图控制器 标识符字符串。如果没有视图控制器与 字符串,这个方法会抛出异常。

讨论你使用这个方法来创建视图控制器对象 你想在你的 应用。在您可以使用此方法检索视图之前 控制器,您必须使用适当的标识符显式标记它 Interface Builder 中的字符串。

此方法创建指定视图控制器的新实例 每次调用它。

那么您的代码将如下所示:

    - (void)tableView:(UITableView *)tableView didSelectRowAtIndexPath:(NSIndexPath *)indexPath {
       self.nextVC = [self.storyboard instantiateViewControllerWithIdentifier:@"nextVCID"];

       self.nextVC.objectToPass = = .. some object from array or somewhere else..
   [self.navigationController pushViewController:self.nextVC animated:YES];
    }

别忘了在 IB 中设置 vc 标识符(Storyboard ID):

【讨论】:

  • 面向未来使用 Xamarin.IOS 的读者。我在 TableViewController 中放置了一个存储最后一个选定项目的字段。然后在 TableViewSource 中,我覆盖了 OnRowSelected,并将该字段的值设置为最后一个选定项。回到控制器中,我覆盖了 PrepareForSegue,并检查最后选择的字段是否为空。如果不是,我检查目标视图控制器是否是正确的类,如果是,我调用公共方法将对象传递给它。最后,我从单元格到第二个视图控制器绘制了一个出口,选择“Selection segue:Show”。感谢您的出色回答
【解决方案2】:

在您的 ViewController 中覆盖 PrepareForSegue 以在目标控制器上设置参数。您需要在目标控制器上定义允许传递参数的公共方法或属性:

public override void PrepareForSegue (UIStoryboardSegue segue, NSObject sender)
    {
      if (segue.Identifier == "TaskSegue") { // set in Storyboard
        var navctlr = segue.DestinationViewController as TaskDetailViewController;
        if (navctlr != null) {

          // some public method you create in your destination controller
          navctlr.SetTask (this, item); 
        }
      }
    }

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2014-02-16
    • 2011-12-15
    • 1970-01-01
    相关资源
    最近更新 更多