繁体   English   中英

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

[英]Can't remove a subview from its superview

当我触摸searchBar以“掩盖”应用程序的其余部分时,我添加了一个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];
}

你已经在本地创建的“blackView”在searchBarShouldBeginEditing函数变量,这是不removeKeyboard函数内部访问。 尝试使用上面已声明的属性变量。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM