我有一个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类的名称
线索就在这里
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];
}
}
要删除单个子视图:
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?
试试这个,
if ([subView isKindOfClass:[UITableView class]])
{
[subView removeFromSuperview];
}
这是应该采取某种方式工作的东西 - 假设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];
}
}