我使用以下代码添加,然后根据某些条件删除UIView。调用noItemsView removeFromSuperView行,但我仍然可以在屏幕上看到该视图。难道我做错了什么?
@interface PantryTableViewController : UITableViewController
{
NSMutableArray *_pantryItems;
NoItemsView *_noItemsView;
}
@end
**PantryTableViewController: viewDidLoad:**
_noItemsView = [[NoItemsView alloc] initWithMessage:@"Opps! No Items in the Pantry!"];
dispatch_async(dispatch_get_main_queue(), ^{
if(_pantryItems.count == 0) {
[self.view addSubview:_noItemsView];
}
else
{
// this line gets invoked but the view is still displayed on the
// screen
[_noItemsView removeFromSuperview];
}
[self.tableView reloadData];
});
解决方案:
缺少if检查以创建noItemsView的实例,如下所示:
if(!_noItemsView)
{
_noItemsView = [[NoItemsView alloc] initWithMessage:@"Opps! No Items in the Pantry!"];
}
答案 0 :(得分:1)
您是否打算删除屏幕上已存在的noItemsView
?如果是这样,您需要将其存储在属性中,而不是像这样的范围变量。
答案 1 :(得分:1)
您正在创建UIView
的新实例并尝试删除从未添加到视图中的实例。
您必须从superview中找到UIView
的实例,然后从内存中删除。
你应该这样试试。
dispatch_async(dispatch_get_main_queue(), ^{
if(_pantryItems.count == 0) {
NoItemsView *noItemsView = [[NoItemsView alloc] initWithMessage:@"Opps! No Items in the Pantry!"];
[self.view addSubview:noItemsView];
}
else
{
// screen
for(UIView *view in [self.view subviews])
{
If([ view isKindOfClass:[NoItemsView Class]){
[view removeFromSuperview];
view = nil;
}
}
}
[self.tableView reloadData];