目标-c,removeFromSuperview每次都不起作用

时间:2015-10-01 08:14:29

标签: ios objective-c uiview

我正在尝试删除视图,有时它可以正常工作,有时也不会。我是初学者。我不知道是什么问题。我烦了。请让我知道问题是什么。我的代码:

-(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]; 但未成功。

2 个答案:

答案 0 :(得分:-1)

在这种情况下我要检查的首要事项是确保仅在主线程上更新我的UI。信任,你已经尝试过了。

接下来,根据Apple Documentation,我会确保以下事项:

  

如果视图的superview不是nil,则superview将释放视图。   切勿在视图的drawRect:方法中调用此方法。

最后,不确定notificationScreen对象的外观,我会尝试在要删除的视图上设置标记,并根据标记值将其删除。不确定notificationScreen是否指向您当前的视图控制器,您的上述代码现在可以使用。试试这个:

  1. 设置要删除的视图的标记 (myNotificationView.tag = 1)初始化并添加到其父视图时。
  2. 当您准备删除通知视图时,请按照这样做
  3. 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;
}