【问题标题】:Adding UIView with its own UIViewController on top of another UIView在另一个 UIView 之上添加具有自己的 UIViewController 的 UIView
【发布时间】:2013-03-18 05:17:13
【问题描述】:

我想在另一个UIView 之上显示一个UIView。我想这样做,这样子视图将有自己的UIViewController。这可能吗?

所以我应该可以在子视图中添加一个按钮:

UIButton *closeButton = [UIButton buttonWithType:UIButtonTypeRoundedRect];
...
[closeButton addTarget:self action:@selector(closeMe) forControlEvents:UIControlEventTouchUpInside];

closeMe 是子视图的 ViewController 中的一个方法。

在我的测试代码中,当用户点击关闭按钮时,它会因未定义的选择器而崩溃,因为父视图的 ViewController 没有 closeMe 方法。

编辑:

对不起,我提到closeMe 方法只是作为一个例子。对于这个子视图,我还需要支持许多其他方法(例如处理视图旋转),而拥有自己的 ViewController 的子视图的目标是封装。

【问题讨论】:

  • 您可以使用 [childview removeFromSupreview] 删除子视图
  • 如果你把孩子作为目标而不是self会发生什么?
  • 将 addTarget: 参数更改为实现 closeMe 方法的视图控制器
  • OP 更新:找出它崩溃的原因。选择器未定义仅仅是因为子视图控制器是创建它的方法中的局部变量。当方法退出时,子视图控制器被释放,因此选择器失败。将子 viewcontroller 移动到父 viewcontroller 的一个强大的 ivar 使这项工作。

标签: ios objective-c uiview uiviewcontroller


【解决方案1】:

-->使用 UIView 子类的自定义视图制作您的 ChildView。
-->将此自定义视图添加为您的视图中的子视图
-->然后使用Protocol来完成你的任务。

【讨论】:

  • 经过进一步的学习,我觉得没有什么好办法可以做我想做的事。我认为这个答案是最好的答案,所以我将其标记为正确。谢谢。
【解决方案2】:

你好像在尝试创建一个 modalView?

这是 modalViews 的直接示例:http://timneill.net/2010/09/modal-view-controller-example-part-1/

我还喜欢在 NSMutableArray 中弹出我的所有 viewController 并将其设为属性(非原子、保留),以便您可以通过分层方式从应用程序中的几乎任何位置轻松访问它们。

【讨论】:

  • 我没有在我的原始帖子中指定这一点,但我不想要模态演示。
【解决方案3】:

我认为您的子视图是自定义视图,那么您可以使用委托/协议。你不想要单独的视图控制器。

Check this

【讨论】:

    【解决方案4】:

    视图控制器和视图具有并行的层次结构。您可以将视图控制器添加为彼此的子级。您的父视图控制器可以加载其子视图控制器,然后将其子视图控制器的视图安装到它自己的视图中。

    UIViewController  --→  UIView
           ↑                 ↑
           | parent vc       | superview
           |                 |
    UIViewController  --→  UIView
    

    但如果你只是添加一个子视图,你可能不需要子视图控制器。

    【讨论】:

      猜你喜欢
      • 2011-06-14
      • 1970-01-01
      • 1970-01-01
      • 2016-09-29
      • 1970-01-01
      • 2011-10-28
      • 2012-01-25
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多