iPhone移除子视图

39

我有一个UINavigationController,在右上角有一个按钮,点击该按钮后我需要获取一个下拉式的表格视图。我创建了另一个UIViewController类,带有xib,并将其添加为当前视图的子视图。它应该在第一次点击时出现,第二次点击时消失。这应该对所有点击(打开和关闭视图)都发生。我编写了这段代码,但不知道哪里有问题。请有人帮忙。

-(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类的名称

4个回答

68

线索就在这里

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

每个 subView 都是 UIView 类的实例,以及你的测试。

isKindOfClass:[TableViewController class]

测试是否为TableViewController类。

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

例如:

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

14

4

请尝试以下内容:

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

     [subView removeFromSuperview];
}

我在我的视图中有一个表格视图。所以这样做的效果是移除了我的视图中的表格视图,而不是我添加为子视图的视图控制器。 - Sharanya K M
你的if条件是否正常工作?http://developer.apple.com/library/mac/#documentation/Cocoa/Reference/Foundation/Protocols/NSObject_Protocol/Reference/NSObject.html#//apple_ref/occ/intfm/NSObject/isKindOfClass: - chinthakad

3

这里有一些内容可以帮助你解决问题——假设tableView1是一个保留的@property(如果不是,那么也许这篇关于懒加载技术的SO回答适合你)。

-(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循环,其中添加了一个子视图。是的,tableview1在其属性中保留。 - Sharanya K M
所以,如果它已经有了一个父视图,那么你之前一定已经将它添加到了某个地方...继续检查,你应该快要成功了。你现在想发布你的修订代码吗? - Damo

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接