无法从其父视图中删除子视图
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 函数中无法访问该变量。
尝试使用您在上面声明的 属性 变量。
当我触摸 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 函数中无法访问该变量。 尝试使用您在上面声明的 属性 变量。