【问题标题】:Iphone remove sub viewIphone 删除子视图
【发布时间】:2012-04-06 21:16:24
【问题描述】:

我有一个 UINavigationController。在右上角我有一个点击按钮,我必须得到一个下拉表视图。我用 xib 创建了另一个 UIViewController 类,并将其作为子视图添加到当前视图中。它应该在第一次点击时出现,在第二次点击时消失。这应该发生在所有点击(打开视图和关闭视图)。我写了这段代码,但不知道我哪里出错了。有人请帮忙

-(void)modalTableView
{
tableView1 = [[TableViewController alloc] initWithNibName:@"TableViewController" bundle:nil];

for (UIView *subView in self.view.subviews)
{

    if ([subView isKindOfClass:[TableViewController class]]) 
    {

         [subView removeFromSuperview];
    }

    else 
    {
        [self.view addSubview:tableView1.view];

    }
  }

}

我在这里错过了什么?

编辑:TableViewController 是我的 UIViewController 类的名称

【问题讨论】:

    标签: ios uitableview drop-down-menu addsubview


    【解决方案1】:

    线索在这里

    for (UIView *subView in self.view.subviews)
    

    每个子视图都属于 UIView 类和您的测试

    isKindOfClass:[TableViewController class]
    

    正在测试类 TableViewController

    我建议这样做的方法是标记您动态添加的视图,比如 99 - 然后在您的循环中,您可以通过它们的标签来识别这些视图。

    例如。

    for (UIView *subView in self.view.subviews)
    {
        if (subView.tag == 99) 
        {
            [subView removeFromSuperview];
        }
    }
    

    【讨论】:

      【解决方案2】:

      试试这个,

      if ([subView isKindOfClass:[UITableView class]]) 
      {
      
           [subView removeFromSuperview];
      }
      

      【讨论】:

      【解决方案3】:

      这里有一些东西应该可以工作 - 假设 tableView1 是一个保留的@property(如果不是,那么可能this所以关于延迟加载技术的答案适合你)。

      -(void)modalTableView
      {
          if (tableView1 != nil)
          {
              tableView1 = [[TableViewController alloc] initWithNibName:@"TableViewController" bundle:nil];
          }
      
          if (tableView1.view.superview == nil)
          {
              [self.view addSubview:tableView1.view];
          } else
          {
              [tableView1.view removeFormSuperview];
          }
      }
      

      【讨论】:

      • 它只是进入第二个 if 循环,它添加了一个子视图。 n 是 tableview1 保留在其属性中。
      • 所以,如果它已经有一个超级视图,你一定已经将它添加到以前的东西中......继续检查你肯定就在附近。您想现在发布修改后的代码吗?
      【解决方案4】:

      斯威夫特版本

      要删除单个子视图:

      subView.removeFromSuperview()
      

      要删除所有子视图:

      for subView in self.subviews as [UIView] {
          subView.removeFromSuperview()
      }
      

      来源:What is the best way to remove all views from parent view / super view?

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2012-02-05
        • 2011-12-06
        • 2023-03-21
        • 1970-01-01
        • 2011-01-25
        • 1970-01-01
        相关资源
        最近更新 更多