奇怪的现象:touchesBegan: 与UITapGestureRecognizer手势没有人响应 以及set方法的妙用
2015-11-30 21:03
483 查看
本打算实现一个点击按钮 弹出 一个landKindView 然后点击屏幕其他部分时移除这个VIew,没想到的是,出了诸多不可思议的问题。 在给这个控制器的View添加手势时,然后居然拦截不到,touchesbegin方法,然后又试了下添加tapGesture,依旧是没有反应 。 然后我试着 在touchesBegin方法中 实现 [super touchesBegins....];依旧是没有任何反应。无奈,又尝试着在View视图上添加一个landBGView,来承载我想要显示的landKindView。 设置 landBGView 为控制器的View的尺寸,然会添加,到控制器的VIew上。然后在landBGView上添加手势,但是仍旧是没有反应,郁闷至极。。。 今天再次尝试了一下,居然就可以了(可能是自己修改了某些东西)。
<span style="font-family: Arial, Helvetica, sans-serif;">可能的原因:</span>
1. View的userEnable 的属性查看是否开启 (尤其是父控件)
2. View的叠放顺序 查看是否被其他的控件挡住
<img src="http://img.blog.csdn.net/20160115104129525?watermark/2/text/aHR0cDovL2Jsb2cuY3Nkbi5uZXQv/font/5a6L5L2T/fontsize/400/fill/I0JBQkFCMA==/dissolve/70/gravity/Center" width="200" height="40" alt="" /><img src="http://img.blog.csdn.net/20160115104156814?watermark/2/text/aHR0cDovL2Jsb2cuY3Nkbi5uZXQv/font/5a6L5L2T/fontsize/400/fill/I0JBQkFCMA==/dissolve/70/gravity/Center" width="200" height="150" alt="" />
3.查看是否添加事件监听
4.查看是否被添加的手势监听拦截
5.对父控件进行上述可能存在的问题检查
(暂时想到这么多)
<span style="white-space:pre"> </span> 但是也在尝试做一些其他的东西。重写set方法来实现某些代码的简化,
主要是操作View的显示与隐藏(或者是刷新操作,网络请求之类的均可),主要是为了操作方便,集中处理细节问题
具体如下: //某按钮的 控制显示子View - (void)categoryBtnClick { self.categoryIsShowing = !self.categoryIsShowing ; } // 重写set方法 - (void)setCategoryIsShowing:(BOOL)categoryIsShowing { if (categoryIsShowing == YES) { _categoryIsShowing =YES; [self.view addSubview: self.landBGView]; } else { _categoryIsShowing =NO; [self.landBGView removeFromSuperview]; } } //这是背景view - (UIView *)landBGView { if (!_landBGView) { self.landBGView = [[UIViewalloc] initWithFrame:self.view.bounds]; // self.landBGView.backgroundColor = [UIColor lightGrayColor]; [self.landBGViewaddSubview:self.landKindView]; UITapGestureRecognizer *tapGesture = [[UITapGestureRecognizeralloc] initWithTarget:selfaction:@selector(toucheslandBGView)]; [self.landBGView addGestureRecognizer:tapGesture]; } return_landBGView; } // - (UIView *)landKindView { if (!_landKindView) { NSArray *landKinds = [NSArrayarrayWithObjects:@"AAA",@"BBB",@"CCC",nil]; CGFloat detailViewX = [UIScreenmainScreen].bounds.size.width -100; // CGFloat detailViewX = 200; CGFloat detailViewY = 64; CGFloat detailViewW = 100; CGFloat detailViewH = 44 * 3; UIView *landKindView = [[UIViewalloc] initWithFrame:CGRectMake(detailViewX, detailViewY, detailViewW, detailViewH) ]; landKindView.backgroundColor = [UIColorlightGrayColor]; CGFloat btnY = 0; CGFloat btnH = 44; for (int i =0; i < 3; i++) { UIButton *btn = [[UIButtonalloc] initWithFrame:CGRectMake(0, btnY + i*btnH, detailViewW, btnH)]; btn.tag = i; [btn setTitle:landKinds[i]forState:UIControlStateNormal]; [btn addTarget:selfaction:@selector(landCategoryBtnClick:)forControlEvents:UIControlEventTouchUpInside]; btn.layer.cornerRadius =5; btn.layer.borderWidth =2; btn.layer.borderColor = [UIColorlightGrayColor].CGColor; //[btn setBackgroundColor:[UIColor blueColor]]; [landKindView addSubview:btn]; UIView *lineView = [[UIViewalloc] initWithFrame:CGRectMake(0 +2, btnY + i*btnH -1, detailViewW - 4, 1)]; lineView.backgroundColor = [UIColorgrayColor]; [landKindView addSubview:lineView]; } landKindView.layer.cornerRadius =5; self.landKindView = landKindView; } return_landKindView; } // 分类按钮 - (void)landCategoryBtnClick:(UIButton *)btn { NSInteger index = btn.tag; switch (index) { case 0:{ NSString *message = @"AAA"; UIAlertView *alert = [[UIAlertViewalloc] initWithTitle:@"提示"message:message delegate:selfcancelButtonTitle:@"确定"otherButtonTitles:nil,nil]; [alert show]; break; } case 1: case 2:{ NSString *message =@"BBB,CCC"; UIAlertView *alert = [[UIAlertViewalloc] initWithTitle:@"请稍候"message:message delegate:selfcancelButtonTitle:@"取消"otherButtonTitles:@"确定",nil]; [alert show]; break; } default: break; } } #pragma mark alertView 代理方法 - (void)alertView:(UIAlertView *)alertView clickedButtonAtIndex:(NSInteger)buttonIndex { [self.landBGViewremoveFromSuperview]; self.categoryIsShowing =NO; if (buttonIndex == 0) { return; }else{ //意见反馈 FeedbackController * feedVC = [[FeedbackControlleralloc]init]; [self.navigationControllershowViewController:feedVC sender:nil]; } }
相关文章推荐
- 在Visual Studio中使用VueJS时,不可以用 v-bind 的简写 : 及 v-on的简写 @
- UI第十四天:UI⾼级可视化设计
- c#子线程操作ui
- 让IE8支持@media query
- UITableView
- 《算法竞赛入门经典2ndEdition 》例题3-6 环状序列(Circular Sequence, Uva1584)
- C# 使用msbuild编译程序
- scala剖析PriorityQueue,权值的使用
- 安装UIIamge拾取图片插件
- 【Win10开发】绘制静态UI
- UI-1-UI入门
- MyEclips启动报错:'Building workspace' has encountered a problem的解决方法
- UI基础-UI高级 可视化设计
- layout_centerVertical="true"用法
- 35.UITabBarController(标签视图控制器)
- 大鱼吃小鱼游戏-fruit.js
- XCTest/XCTest.h not found on old projects built in Xcode
- UI基础
- IOS之--UI进阶--多控制器管理第一天
- easygui(一)