xcode/ios:以编程方式启动模态视图控制器时如何传递数据

Posted

技术标签:

【中文标题】xcode/ios:以编程方式启动模态视图控制器时如何传递数据【英文标题】:xcode/ios: How to pass data when programmatically launching modal view controller 【发布时间】:2015-04-06 14:48:07 【问题描述】:

您好,我正在使用以下代码以编程方式启动一个存在于情节提要中的视图控制器(虽然它可以工作,但可能不太正确)。视图控制器是一个屏幕,用于编辑最初源自 tableview 的详细视图。故事板中没有可供我使用的 segue——这就是我以编程方式启动它的原因。

- (void) editView:(id) sender

    NSLog(@"pressed");
    UIStoryboard *storyBoard = self.storyboard;
    IDEditVC *secondViewController =
    [storyBoard instantiateViewControllerWithIdentifier:@"editvc"];

问题:

如何传递表格的索引路径或行,以便为此记录绘制适当的数据?

感谢您的任何建议。

【问题讨论】:

为什么要实例化@"editvc"两次? 你有 'secondViewController' 的实例,在 IDEditVC 的 .h 文件中声明任何属性,比如 NSString *myString。并像 secondViewController.myString = yourIndexPath 一样使用它 如果你有一个指向新视图控制器的指针(你有,因为你创建了它),你可以向它发送你喜欢的任何消息,包括设置它可能需要的任何数据的消息。跨度> “没有可用的 segue”是什么意思?你可以创建一个segue。 我删除了两条无关的行。故事板中没有segue,因为出于某种我不明白的原因,详细的VC不允许我在导航栏中添加编辑按钮。这就是我以编程方式创建编辑按钮并启动编辑视图控制器的原因。如果有办法以编程方式创建 segue,我不知道。 【参考方案1】:

最简单的方法是在模态 VC 上定义一个属性并为其分配索引路径。

- (void)editView:(id)sender
       
    IDEditVC *secondViewController = (IDEditVC *)[self.storyboard instantiateViewControllerWithIdentifier:@"editvc"];
    secondViewController.selectedIndexPath = yourIndexPath;

其中selectedIndexPath 是您在IDEditVC 上定义的属性 yourIndexPath 是您要用于填充 IDEditVC 的索引路径

您在访问该索引路径时遇到任何问题吗?你把它保存在某个地方吗?

【讨论】:

我在原始表视图控制器 prepareforsegue 中有它,但由于我使用的是核心数据,所以它有点棘手。我有 NSIndexPath *indexPath = [self.tableView indexPathForSelectedRow];项目 *item = [self.fetchedResultsController destViewController.item=item;objectAtIndexPath:indexPath];然后在 viewDidLoad 的详细视图中我只使用 self.itemLabel.text = self.item.name;其中 name 是项目实体的属性, itemLabel 是 VC 中的属性。所以此时索引路径是隐含的。 在 iDEditvc 中为 Items 创建属性,然后通过创建对象第二个视图 controller.items = self.item 来传递值

以上是关于xcode/ios:以编程方式启动模态视图控制器时如何传递数据的主要内容,如果未能解决你的问题,请参考以下文章

以编程方式创建和呈现模态视图控制器

带有选项卡视图控制器的 Xcode IOS 转换视图

以编程方式从模态视图控制器切换父选项卡

以编程方式将导航控制器嵌入模态视图控制器

以编程方式在主视图控制器上加载模态视图控制器

如何将 segue 标识符添加到以编程方式进行的模态转换?