[英]UIView on top of UIScrollview, pass through only scrolls, not taps
我有一個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;
}
編輯:替代解決方案
根據您的評論,您希望用戶通過其中一個子視圖按鈕開始滾動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;
}
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.