如何使用segue传递对象

时间:2016-05-04 19:58:03

标签: c# ios uitableview uiview xamarin

我带有一个带有对象集合的uitableview。 当我点击UITableViewCell时再打开另一个UIView。 但我想发送UITableViewCell中的对象用于这个新的UIView并在那里显示它们的详细信息。 我接着回答了这个问题以加载另一个视图:ViewController Segue Xamarin 如果有人帮忙,我将非常感激

enter image description here

2 个答案:

答案 0 :(得分:1)

在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); 
        }
      }
    }

答案 1 :(得分:1)

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

  

讨论   此方法的默认实现不执行任何操作;您   可以覆盖它以将相关数据传递给新的视图控制器或   窗口控制器,基于segue的上下文。 segue对象   描述转换并包括对两个控制器的引用   参与segue。

     

可以从多个来源触发Segues,因此请使用这些信息   在segue和sender参数之间消除不同的歧义   您应用中的逻辑路径。例如,如果segue源自a   在表视图中,sender参数将标识用户的单元格   点击。您可以使用该信息来设置数据   目标视图控制器。

在这种情况下,你需要“保存”你想传入的对象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;
    }
}

另一种方法是拒绝使用segues并通过其storyboardID获取vc。

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

  

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

     

讨论您可以使用此方法创建视图控制器对象   你想在你的程序中操作和呈现   应用。在使用此方法检索视图之前   控制器,您必须使用适当的标识符明确标记它   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标识符(故事板ID):

enter image description here