2016-05-04 49 views
0

我携带一个包含对象集合的uitableview。 当我点击一个UITableViewCell打开另一个UIView。 但我想发送UITableViewCell中的这个新UIView对象并在那里显示它们的详细信息。 我跟着回答这个问题加载另一种观点认为:ViewController Segue Xamarin 我很感激,如果有人帮助如何使用segue传递对象

enter image description here

+0

尝试的https:/ /developer.xamarin.com/api/member/UIKit.UIViewController.PrepareForSegue/ – brandonscript

回答

1

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

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

有几个解决方案,第一种是使用 prepareForSegue(_:发件人:)方法:

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

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

在你需要 “拯救” 要在didSelectRow传递对象THI情况:

- (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 :)方法:

返回值对应于指定的 标识符字符串视图控制器。如果没有视图控制器与 字符串关联,则此方法会引发异常。

讨论您可以使用此方法来创建你想要操作和编程目前在 应用程序 视图控制器对象。在使用此方法检索控制器之前,必须使用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