Kyl*_*uth 5 iphone objective-c uitableview uiscrollview ios
我有一个UITableview子类UIVIew在表的一部分之上,如下所示:
-uitable--
|--uiview-|
|| ||
|| ||
|---------|
| |
| |
-----------
该视图与tableview具有相同的superview,但部分涵盖了tableview.上面有几个按钮UIView.我希望用户能够在视图上滚动并随后移动tableview(就像他在桌面上滚动一样).但是,如果他点击视图上的按钮,我希望该点击在视图上注册,而不是发送到tableview.现在,我重写了视图的- (BOOL)pointInside:(CGPoint)point withEvent:(UIEvent *)event方法,总是返回NO,这适用于滚动,但具有将所有触摸发送到tableview的效果,使我的按钮无效.我有什么方法可以将滑动/平移手势传递到桌面视图,但保持轻敲手势?
谢谢,
不要总是从pointInside返回NO,而是检查点是否与任何UIButton子视图相交 - 如果是,则返回YES.
- (BOOL) pointInside:(CGPoint)point withEvent:(UIEvent *)event
{
for ( UIView* sv in self.subviews )
{
if ( CGRectContainsPoint( sv.frame, point) )
return YES;
}
return NO;
}
Run Code Online (Sandbox Code Playgroud)
编辑:替代解决方案
根据您的评论,您希望用户通过其中一个子视图按钮开始滚动UITableView.要完成这项工作,您需要使包含按钮的UIView成为UITableView的子视图.
通过这样做,UIView将开始与UITableViewCells一起滚动.为了防止这种情况,您需要在滚动发生时调整框架,或者可能使用约束将其锁定到位.
- (void) viewDidLoad
{
[super viewDidLoad];
// instantiate your subview containing buttons. mine is coming from a nib.
UINib* n = [UINib nibWithNibName: @"TSView" bundle: nil];
NSArray* objs = [n instantiateWithOwner: nil options: nil];
_tsv = objs.firstObject;
// add it to the tableview:
[self.tableView addSubview: _tsv];
}
// this is a UIScrollView delegate method - but UITableView IS a UIScrollView...
- (void)scrollViewDidScroll:(UIScrollView *)scrollView
{
[scrollView bringSubviewToFront:_tsv];
CGRect fixedFrame = _tsv.frame;
fixedFrame.origin.y = 100 + scrollView.contentOffset.y;
_tsv.frame = fixedFrame;
}
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
2341 次 |
| 最近记录: |