在 Obj-C 中动态进行 segue 的最有效方法?

Posted

技术标签:

【中文标题】在 Obj-C 中动态进行 segue 的最有效方法?【英文标题】:Most efficient way to dynamically make a segue in Obj-C? 【发布时间】:2018-10-03 14:24:02 【问题描述】:

我正在为我的应用程序编写一个 segue。基本上,当按下 UITableViewCell 中的附件时,应该调用这个 segue。

在写它之前,我正在计划如何处理它。

第一种方法:创建一个视图,添加标签,设置标识符,使用accessoryButtonTappedForRowWithIndexPath 调用segue,使用标识符加载视图,访问(不知何故,不确定)视图内的标签,使用适当的内容更改它们,显示。

第二种方法:制作一个笔尖,以某种方式加载笔尖并制作segue,访问标签并适当更改内容,显示。

如果我使用标识符来加载带有 segue 的视图,我不确定哪种方法最好,以及我需要做什么来访问标签。

建议?

【问题讨论】:

请提供更多关于您想要达到的目标的详细信息。如果您使用故事板并使用系统附件视图,您可以通过“附件操作”轻松定义 segue。如果你想从代码中调用 segue - 使用 UITableView Delegate func tableView tableView:accessoryButtonTappedForRowWithIndexPath: 并从那里(通过 id)启动你想要的 segue。如果您想定义自定义按钮而不是附件视图,则可以在单元格中使用定义闭包,在创建单元格时分配它并使用它。 嘿,迈克尔,这正是我在帖子中所写的。我知道该怎么做,虽然我不确定如何在加载了标识符的东西(不是 xib)中显示动态内容。 你的意思是当内容是动态的时候,你的意思是你不知道如何在表格视图中显示单元格的内容? 不,我知道该怎么做。问题是,当我使用动态 segue 显示 segueView 时,如何在 segueView 中显示动态内容? Tou 的意思是如何让 segue 呈现的视图知道要呈现什么对象? 【参考方案1】:

这在很大程度上取决于您如何处理附件视图和触发 segue。问题是您必须在原地触发 segue,并实际向其他视图提供信息。所以你必须建立额外的变量,比如@property NSIndexPath *selectedAccessoryIndex;

然后相应地更新它,比如

- (void)tableView:(UITableView *)tableView accessoryButtonTappedForRowWithIndexPath:(NSIndexPath *)indexPath 

    self.selectedAccessoryIndex = indexPath;
    [self performSegueWithIdentifier:@"segue" sender:nil];


在准备segue的同时继续进行:

- (void)prepareForSegue:(UIStoryboardSegue *)segue sender:(id)sender 
    ((ViewController *)segue.destinationViewController).selectedString = self.array[self.accessoryIndex.row];

请注意,在这个地方目标视图控制器尚未加载,因此您现在无法访问任何插座。当然,您可以通过调用[segue.destinationViewController view]; 来加载它,但不建议这样做。更好地提供对象来显示(更好的弱)。然后更新网点viewDidLoad

【讨论】:

以上是关于在 Obj-C 中动态进行 segue 的最有效方法?的主要内容,如果未能解决你的问题,请参考以下文章

在内存中操作 std::strings 的 2D 动态数组的最有效方法是啥?

来自 viewDidAppear 的 Segue 调用有效,但不是来自 viewWillAppear

为 Swift 中的 Segue 做准备

如何在 obj-c 中解析动态 json 数据?

在spring mvc应用程序中加密json有效负载的最早点

SceneKit,动态加载和替换纹理的最有效方法是啥? UIImage,MTLTexture,MDLTexture,URL?