我对编程和目标C都很陌生.我想知道如何制作一个有空白屏幕和计时器一分钟的应用程序.你的意思是尽可能快地点击,只要你可以.我想知道如何实现UITapGestureRecognizer我的代码.
user-interface objective-c uigesturerecognizer ios uitapgesturerecognizer
我UIScrollView添加了一个单击手势识别器来显示/隐藏一些UI叠加使用:
UITapGestureRecognizer *singleTap = [[UITapGestureRecognizer alloc] initWithTarget:self action:@selector(handleTap:)];
[scrollView addGestureRecognizer:singleTap];
Run Code Online (Sandbox Code Playgroud)
和:
- (void)handleTap:(UITapGestureRecognizer *)sender {
// report click to UI changer
}
Run Code Online (Sandbox Code Playgroud)
我在底部添加了一个简单的表格视图UIScrollView.一切正常(水平和垂直滚动)但问题是点击仅由手势识别器(上图)识别,而不是由简单的表格视图识别.如果我删除注册手势监听器的行,一切正常,表视图会通知自己.
这就好像手势识别器功能"吃掉"表视图上的点击事件并且不向下传播它们.
任何帮助表示赞赏
可能有人请帮助我认识一个水龙头,当用户点击该标题在导航栏?
我想识别这个tap,然后动画tableHeaderView出现.可能会向下滑动TableView.
这个想法是用户可以选择一个快速选项(来自tableViewHeader)来重新填充TableView.
但是我无法识别任何水龙头.
我正在使用Swift.
谢谢.
我们使用a UIPickerView来允许用户从选项列表中进行选择.我们将添加UIPickerView为容器UIView的子视图.然后我们将UITapGestureRecognizer添加到容器中UIView.在UITapGestureRecognizer正在使用经不起它的超级视图关闭该选择器.
在iOS 7.0及以前的版本中,这是按预期工作的.但是,在iOS 7.1中,此设置不再起作用,UITapGestureRecognizer即无法识别tap并调用操作中指定的选择器(取消选择器视图和容器视图).代码如下
- (void)viewDidLoad
{
[super viewDidLoad];
// Do any additional setup after loading the view, typically from a nib.
self.nameList=[[NSMutableArray alloc] initWithObjects:@"A",@"B",@"C", nil];
UIPickerView *myPickerView = [[UIPickerView alloc] initWithFrame:CGRectMake(0, 200, 320, 200)];
myPickerView.delegate = self;
myPickerView.showsSelectionIndicator = YES;
UITapGestureRecognizer *singleTap = [[UITapGestureRecognizer alloc] initWithTarget:self action:@selector(tapInListPickerView:)];
[singleTap setNumberOfTapsRequired:1];
[singleTap setNumberOfTouchesRequired:1];
[myPickerView addGestureRecognizer:singleTap];
[self.view addSubview:myPickerView];
}
-(void)tapInListPickerView:(UIGestureRecognizer *)sender
{
NSLog(@"Taped in pikcer view");
}
Run Code Online (Sandbox Code Playgroud)
如果需要任何其他信息或者有更优选的方法,请告诉我.
我遇到了一个问题,即确定如何检测UIView被触及和UIView被点击.当它被触及时,我希望UIView改变它的背景颜色.当它被触摸时,我希望UIView执行某些任务.我想知道我是如何解决这个问题的.
-(void)viewDidLoad
{
UITapGestureRecognizer *dismissGestureRecognition = [[UITapGestureRecognizer alloc] initWithTarget:self action:@selector(handleDismissDoubleTap:)];
dismissGestureRecognition.numberOfTapsRequired = 1;
[sectionDismissDoubleView addGestureRecognizer:dismissGestureRecognition];
UITapGestureRecognizer *dismissGestureDownRecognition = [[UITapGestureRecognizer alloc] initWithTarget:self action:@selector(dismissGestureDownRecognition:)];
dismissGestureRecognition.numberOfTouchesRequired = 1;
[sectionDismissDoubleView addGestureRecognizer:dismissGestureDownRecognition];
}
- (void)handleDismissDoubleTap:(UIGestureRecognizer*)tap {
SettingsDismissDoubleViewController *settingsDouble = [[SettingsDismissDoubleViewController alloc] initWithNibName:@"SettingsDismissDoubleViewController" bundle:nil];
[self.navigationController pushViewController:settingsDouble animated:YES];
}
- (void)dismissGestureDownRecognition:(UIGestureRecognizer*)tap {
NSLog(@"Down");
}
Run Code Online (Sandbox Code Playgroud) 我正在尝试捕捉我的点击事件MKMapView,这样我就可以MKPinAnnotation在用户点击的点上删除.基本上我有一个覆盖的地图MKOverlayViews(显示建筑物的叠加层),我想通过删除MKPinAnnotaion并在标注中显示更多信息来为用户提供有关该叠加的更多信息.谢谢.
mkpinannotationview mkmapview ios4 mkoverlay uitapgesturerecognizer
我添加了两个uiimageviews,一个在另一个subview uiview(imageview1,imageview2)上.在第一个视图中,顶部uiimageview是隐藏(imageview2),在第二个视图中,底部imageview是隐藏的(imageview1).
分配点按手势:
UITapGestureRecognizer *singleTap = [[UITapGestureRecognizer alloc] initWithTarget:self action:@selector(oneTap:)];
UITapGestureRecognizer *singleTap1 = [[UITapGestureRecognizer alloc] initWithTarget:self action:@selector(oneTap:)];
Run Code Online (Sandbox Code Playgroud)
将uiimageview的用户交互设置为YES.
[singleTap setNumberOfTapsRequired:1];
[singleTap1 setNumberOfTapsRequired:1];
Run Code Online (Sandbox Code Playgroud)
//向uiimageview添加手势
分别添加轻击手势识别器和选择器.
[imageview1 addGestureRecognizer:singleTap];
[imageview2 addGestureRecognizer:singleTap1];
Run Code Online (Sandbox Code Playgroud)
但我的水龙头没有得到认可.
任何人都可以告诉我错误在哪里吗?
我想响应UICollectionView中单元格的双击,并具有双击操作取消单元格选择.
这就是我尝试过的:
UITapGestureRecognizer *tapRecogniser = [[UITapGestureRecognizer alloc] initWithTarget:self action:@selector(handleTapGesture:)];
tapRecogniser.numberOfTapsRequired = 2;
for (UITapGestureRecognizer *recogniser in [self.collectionView gestureRecognizers]) {
[recogniser requireGestureRecognizerToFail:tapRecogniser];
}
[self.collectionView addGestureRecognizer:tapRecogniser];
Run Code Online (Sandbox Code Playgroud)
也就是说,如果我的双击手势识别器成功,我试图让默认手势识别器失败.
这似乎不起作用,因为我的集合视图委托collectionView:didSelectItemAtIndexPath:仍然在双击后被调用
Apple的文档在这一点上有误导性,声称默认手势识别器是UITapGestureRecognizer子类的一个实例,所以可以很容易地选择它[recogniser isKindOfClass:[UITapGestureRecognizer class]].不幸的是,这是一个错误.
objective-c uikit ios uitapgesturerecognizer uicollectionview
我UIView在屏幕上添加了几个对象(例如5个),一个在另一个内部.这一点,例如,view5.superview = view4,view4.superview = view3,view3.superview=view2,view2.superview = view1.对于所有这些UIView我设置了uitapgesturerecognizer; 对于view1-4我只是在回调中执行NSLog(@"tap%@",self),而对于view5,我设置以下内容:从层次结构中删除view4,然后将相同的对象view4'放在层次结构的同一位置.该对象还包含为其UITapGestureRecognizer设置的view5' (实际上,我用类似的一个替换标记的一部分).
然后我开始点击view5.有些时候view5继续捕捉它的点击,一切都没问题,但随后的点击随机数(每次这个数字不同),其中一个view1-4对象开始捕捉这个点击,虽然我们仍然点击view5.整个问题具有随机特征 - 有时它发生在第10次发射,有时发生在第二次.有时错误的物体会在第一次敲击时开始捕捉水龙头.当一切都出错时,我也永远不知道哪个物体会碰到水龙头.用于视图的帧(n + 1)被设置为例如帧视图(n)的一半,而用于view1的帧 - 例如(0,0 320,460).
上面描述的ui对象的所有操作都是在主线程中进行的,而我所讲述的所有内容都完全适用于iOS 4.3 - 6.1,并且有更复杂的例子.但是iOS7让它变成了一种随意的地狱.
更新: 我已经创建了一个示例项目,以简化调试过程.无需添加/删除子视图操作.屏幕上只有4个视图,点按应用程序会记录所点击的视图.因此,您需要点击最小的视图(4).如果你在日志中看到"点按4点击4点击4 ..." - 这就是一切正常,再次停止并再次运行,再次停止并再次运行等情况.在某些运行中(可能在10之后) +成功运行)你不会在第一行看到"点击4",你会看到"点击1"或"点击2"或"点击3",它将继续如此 - 这些都是坏情况.
示例项目可以从这里下载:http://tech.octopod.com/test/BuggySample.zip(归档中只有33 Kb).
更新2
我们已经向Apple发布了一个错误,我会在这里发布一些反馈意见.但是,任何好的解决方法都将非常感谢!
更新3
由Yuvrajsinh提供的解决方案真正致力于示例项目.不幸的是,它仍然没有帮助解决最初出现的主项目中出现的问题.现在的主要原因是,如果没有自我手势的任何视图都放在可点击内容上,则其下的随机视图元素开始捕捉交互(而不是具有交互手势集的顶部交互.你有任何想法如何解决它?更新的样本可以从这里下载:http://tech.octopod.com/test/BuggySample2.zip
我正在使用NIB文件来布局自定义表格视图单元格.此单元格有一个带有出口的标签,名为lblName.将UITapGestureRecognizer添加到此标签永远不会触发关联的事件.我有userInteractionEnabled = YES.
我猜测问题是UILabel在TableView中并且表/单元视图正在拦截水龙头.我能为此做点什么吗?
我想要做的就是在按下UILabel时执行一些自定义操作!我所见过的所有解决方案都是荒谬的.使用标准工具集应该很容易.但显然不是.
这是我正在使用的代码:
- (void)tapAction {
NSLog(@"Tap action");
}
- (void)viewDidLoad
{
[super viewDidLoad];
// Do any additional setup after loading the view from its nib
UITapGestureRecognizer *recognizer = [[UITapGestureRecognizer alloc] initWithTarget:self action:@selector(tapAction)];
[recognizer setNumberOfTapsRequired:1];
//lblName.userInteractionEnabled = true; (setting this in Interface Builder)
[lblName addGestureRecognizer:recognizer];
}
Run Code Online (Sandbox Code Playgroud) ios ×7
objective-c ×4
gesture ×1
ios4 ×1
ios6.1 ×1
ios7 ×1
ios7.1 ×1
mkmapview ×1
mkoverlay ×1
swift ×1
uiimageview ×1
uikit ×1
uipickerview ×1
uiscrollview ×1