将视图从一个控制器传递到另一个控制器 iOS
Posted
技术标签:
【中文标题】将视图从一个控制器传递到另一个控制器 iOS【英文标题】:Pass a View from One controller to Other Controller iOS 【发布时间】:2016-05-16 10:55:22 【问题描述】:我在第一个控制器中有 tableView,我正在使用 xib 中定义的 tableviewcells 来制作它。现在,当我单击一个 tableviewcell 时,我需要打开一个当前视图控制器并将 tableviewcell 的视图传递给第二个视图控制器。
我在第二个视图控制器中使用了一个 init 方法,并将第一个 VC 的 cell.contentView 传递给了第二个 VC。
工作正常 tableviewcell 内容视图显示在 2ND VC 第一个表格部分,但是当我按下靠近 2nd VC 时。TableViewCell 内容视图从第一个 VC 消失。
我做不到。我在网上看到他们说在第二个 VC 上再次注册 XIB,或者使用存档和取消存档,但这些都是耗时的操作,我只想将 tableviewcell 内容视图传递给第二个 vc,当我关闭第一个 VC 时,我希望它回到那里.
任何帮助将不胜感激。
View是按下的tableview单元格的cell.contentView
self.superViewCell = View;
- (UITableViewCell *)tableView:(UITableView *)tableView cellForRowAtIndexPath:(NSIndexPath *)indexPath
HVAPParentTableViewCell * cell = [[HVAPParentTableViewCell alloc] init];
[cell.contentView addSubview:self.superViewCell];
return cell;
【问题讨论】:
不不不!!!!不要这样做!!!重新思考你的设计模式! 这似乎是一个相当奇怪的结构。我的建议是:1-如果您需要视图的图像/表示,您应该截取屏幕截图并将其传递。 2 - 如果您需要该视图的功能,您将传递一个包含所需信息的变量(例如字典)并在下一个视图控制器上构建视图。但是,您不应该传递内容视图。 我应该如何截屏并传递它?这是我在第二个 vc 中需要的一个小视图 哇……太好了……我在问一个我认为是真实的问题,而你们却反对……让我知道为什么? 【参考方案1】:1st 视图控制器中可能缺少单元格,因为您删除了它的 contentView
并传递给 2nd 视图控制器。这显然是您可能不想使用的反模式。您可能希望传递到 2nd 视图控制器单元的“状态”而不是其contentView
,并使用相同的单元数据初始化一个新单元。
对您实际尝试实现的目标知之甚少,我的一般建议是使用与 1st 中相同的 xib 和单元格标识符注册 2nd 视图控制器的表视图 视图控制器。现在您可以只传递所选单元格的标识符(这样您就知道在 cellForRowAtIndexPath
中为传递的单元格出列时使用哪个标识符)和单元格的数据。然后,您可以使用 1st 视图控制器中的单元格数据初始化 2nd 视图控制器中的同一单元格。
【讨论】:
我知道这件事,但我想以不同的方式来做。这是我这样做的常用方法。但是谢谢 @SudhanshuGupta 好吧,如果您 100% 确定要这样做,您可能需要:a) 将单元格的视图传回视图控制器 1并手动将其放回原始单元格中; b) 在第一个视图控制器的表上调用reloadData
以重新创建单元格; c) 在通过NSKeyedArchiver
将其传递给视图控制器 2 之前,获取视图的“深层副本”,以便旧的保留在原处。以上是关于将视图从一个控制器传递到另一个控制器 iOS的主要内容,如果未能解决你的问题,请参考以下文章
iOS - 使用 xib 中的 tabBarController 将数据从一个 viewController 传递到另一个 viewController