簡體   English   中英

UIVc在UIScrollview之上,只通過滾動而不是點擊

[英]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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM