我正在尝试删除视图,有时它可以正常工作,有时也不会。我是初学者。我不知道是什么问题。我烦了。请让我知道问题是什么。我的代码:
-(void)hideNotification
{
btnNotification.selected=NO;
btnHome.selected=YES;
[notificationScreen.view removeFromSuperview];
notificationScreen=nil;
isNotificationScreen=NO;
}
我也尝试过: dispatch_async(dispatch_get_main_queue(),^ {
[notificationScreen.view removeFromSuperview];
<}>; 和 performSelectorOnMainThread:@selector(removeFromSuperview) withObject:nil waitUntilDone:NO];
但未成功。
答案 0 :(得分:-1)
在这种情况下我要检查的首要事项是确保仅在主线程上更新我的UI。信任,你已经尝试过了。
接下来,根据Apple Documentation,我会确保以下事项:
如果视图的superview不是nil,则superview将释放视图。 切勿在视图的
drawRect:
方法中调用此方法。
最后,不确定notificationScreen
对象的外观,我会尝试在要删除的视图上设置标记,并根据标记值将其删除。不确定notificationScreen
是否指向您当前的视图控制器,您的上述代码现在可以使用。试试这个:
myNotificationView.tag = 1
)初始化并添加到其父视图时。 for (UIView *view in [self.view subviews] ) {
if (view.tag == 1 ) {
[view removeFromSuperview];
}
}
对于第2步,您可以强烈引用通知视图,并在该对象上调用removeFromSuperview
。
答案 1 :(得分:-1)
首先,您需要检查您的视图是否为子视图。只需更改如下代码:
-(void)hideNotification
{
btnNotification.selected=NO;
btnHome.selected=YES;
if([notificationScreen.view isDescendantOfView:self.view]){
[notificationScreen.view removeFromSuperview];
}
notificationScreen=nil;
isNotificationScreen=NO;
}