无法从其父视图中删除子视图

Can't remove a subview from its superview

当我触摸 searchBar 到 "mask" 应用程序的其余部分时,我添加了 subview。然后,我想在触摸它时删除它。但是没有任何反应。有人可以给我解释一下吗?

这是我的代码:

@property (nonatomic) UIView *blackView;

- (BOOL)searchBarShouldBeginEditing:(UISearchBar*)searchBar {
    NSLog(@"Touched in searchbar");
    UIView* blackView = [[UIView alloc] initWithFrame:[[UIScreen mainScreen] bounds]];
    blackView.backgroundColor = [UIColor colorWithRed:0.0 green:0.0 blue:0.0 alpha:0.3];

    UITapGestureRecognizer *singleFingerTap = [[UITapGestureRecognizer alloc] initWithTarget:self action:@selector(removeKeyboard:)];
    [self.view addGestureRecognizer:singleFingerTap];

    [self.view addSubview:blackView];

    return YES;
}

-(void)removeKeyboard:(UITapGestureRecognizer *)recognizer {
    [self.searchBar resignFirstResponder];
    [self.blackView removeFromSuperview];
}

谢谢。

你正在做

[self.blackView removeFromSuperview];

很好。但我没有看到你在任何地方设置它。在创建黑色视图后执行此操作。

[self setBlackView:blackView]

在函数 searchBarShouldBeginEdit 中创建新变量 backView:

UIView* blackView = [[UIView alloc] initWithFrame:[[UIScreen mainScreen] bounds]];

在这种情况下 self.blackView 不是这个 UIView

像这样在界面中定义UIView *blackView

@iterface Controller {
     UIView *blackView;
}

然后创建黑色视图:

- (BOOL)searchBarShouldBeginEditing:(UISearchBar*)searchBar {
    blackView = [[UIView alloc] initWithFrame:[[UIScreen mainScreen] bounds]];
    blackView.backgroundColor = [UIColor colorWithRed:0.0 green:0.0 blue:0.0 alpha:0.3];

    ....
    return YES;
}

现在删除它:

-(void)removeKeyboard:(UITapGestureRecognizer *)recognizer {
    ...

    [blackView removeFromSuperview];
}

我的错。我创建了一个新变量,而不是使用界面中的变量。这里是干净的代码。

@property (nonatomic) UIView *blackView;

- (BOOL)searchBarShouldBeginEditing:(UISearchBar*)searchBar {
    NSLog(@"Touched in searchbar");
    self.blackView = [[UIView alloc] initWithFrame:[[UIScreen mainScreen] bounds]];
    self.blackView.backgroundColor = [UIColor colorWithRed:0.0 green:0.0 blue:0.0 alpha:0.3];

    UITapGestureRecognizer *singleFingerTap = [[UITapGestureRecognizer alloc] initWithTarget:self action:@selector(removeKeyboard:)];
    [self.blackview addGestureRecognizer:singleFingerTap];

    [self.view addSubview:self.blackView];

    return YES;
}

-(void)removeKeyboard:(UITapGestureRecognizer *)recognizer {
    [self.searchBar resignFirstResponder];
    [self.blackView removeFromSuperview];
}

您在 searchBarShouldBeginEditing 函数中本地创建了 'blackView' 变量,在 removeKeyboard 函数中无法访问该变量。 尝试使用您在上面声明的 属性 变量。