上下滚动冲突
想实现以下tableview+scrollview,scrollview是最底层。Segment和TableView是都是单独写好的,都可以左右滑动。最上面是一个header部分,内容不变的,回显示一些图片什么的。想做到tableview向上滑动的时候header部分页上移,以便给下面的显示提供更多空间。上移的时候navigationBar会显示,Segment会停留,类似TableView的HeaderView。
为了实现这个真是搞了许久,今天突然发下原来是下面这个方法可以同时让scrollview接收两个事件,直接自定义一个scrollview放上这个方法就行了。参考http://blog.csdn.net/sanmaofly/article/details/12218591
- (BOOL)gestureRecognizer:(UIGestureRecognizer *)gestureRecognizer shouldRecognizeSimultaneouslyWithGestureRecognizer:(UIGestureRecognizer *)otherGestureRecognizer {
return YES;
}
至于到时候区分tableView和scrollView,在代理方法中判断
-(void)scrollViewDidScroll:(UIScrollView *)scrollView{
if ([scrollView isKindOfClass:[UITableView class]]){
//UITableView
}
if ([scrollView isEqual:self.scrollView]) {
//scrollView
}
{
</br>
scrollview上设置点击事件和scrollview上的tableview的选中方法冲突
一般出现在有选择功能的页面, 页面本身肯定是scrollview的, 又想设置点击scrollview空白处收起选项卡或者键盘, 又想选项卡可以点击选择(选项卡tableview), 这时候scrollview的点击事件就会跟tableview的didselect方法冲突了, 造成didselect代理方法不执行而只执行scrollview的点击事件方法.
解决方法:
为scrollview的点击手势设置代理self
在文件中实现UIGestureRecognizerDelegate中的
- (BOOL)gestureRecognizer:(UIGestureRecognizer *)gestureRecognizer shouldReceiveTouch:(UITouch *)touch;
代码如下:
- (BOOL)gestureRecognizer:(UIGestureRecognizer *)gestureRecognizer shouldReceiveTouch:(UITouch *)touch
{
// 输出点击的view的类名
// 若为UITableViewCellContentView(即点击了tableViewCell),则不截获Touch事件
if ([NSStringFromClass([touch.view class]) isEqualToString:@"UITableViewCellContentView"])
{
return NO;
}
//截获Touch事件
return YES;
}