[英]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.