问题描述:项目中使用了自定义的cell,cell上添加有按钮,按钮的点击方法触发的方式设置的是UIControlEventTouchUpInside,但是在测试过程中发现必须非常快速的点击一下按钮才能触发点击事件,这样的话在用户实际的使用过程中肯定有很多问题,然后进行调试,网上推荐的方法如下:
把UIControlEventTouchUpInside改成UIControlEventAllEvents
-(void)buttonAction:(id)sender forEvent:(UIEvent *)event{
UITouchPhase phase = event.allTouches.anyObject.phase;
if (phase == UITouchPhaseBegan) {
NSLog(@"press");
}
if(phase == UITouchPhaseEnded){
NSLog(@"release, do something");
}
}
代码很容易理解,把一个点击动作分成两部分"UITouchPhaseBegan"和" UITouchPhaseEnded",然后根据需要在不用的位置执行相应的代码, UITouchPhaseEnded就相当于UIControlEventTouchUpInside,但是测试发现依然是只有非常快速的点击才会依次执行两个方法,否则会执行两次第一个方法,也就是输出两侧press,这个点击点击动作就结束了,这就匪夷所思了.继续检查返现在下拉tableView的时候,tableView的row会晃动,感觉像是在不挺的刷新UI,检查代码发现在控制内后有一个回调方法一直在执行,方法内调用了 [tableView reload]; 注释掉,问题解决
网友评论