簡體   English   中英

UIWebview刪除點擊以進行聚焦

[英]UIWebview remove tap to focus

當我雙擊網站的一部分時,UIWebView通常專注於所選內容,現在我希望UIWebView忽略雙擊,但仍然能夠與之交互。

我該怎么做?

雙擊由UITapGestureRecognizer識別。 如果你真的想要這個,請瀏覽視圖層次結構。 有點棘手,但它應該工作。

代碼如下所示:

- (void)goThroughSubViewFrom:(UIView *)view {
    for (UIView *v in [view subviews])
    {
        if (v != view)
        {
            [self goThroughSubViewFrom:v];
        }
    }
    for (UIGestureRecognizer *reco in [view gestureRecognizers])
    {
        if ([reco isKindOfClass:[UITapGestureRecognizer class]])
        {
            if ([(UITapGestureRecognizer *)reco numberOfTapsRequired] == 2)
            {
                [view removeGestureRecognizer:reco];
            }
        }
    }
}

我在這里放了一個演示: NoDoubleTapWebView

希望能幫助到你。

iOS 5.0+:

UIWebView包含一個UIScrollView以顯示其內容,並可通過UIWebViewscrollView屬性訪問。 因此,一種可行的方法是將UIScrollView子類化並覆蓋-touchesShouldBegin:withEvent:inContentView 您可以從其tapCount屬性中獲取UITouch對象的點擊次數,該屬性可用於過濾掉雙擊手勢,否則調用super方法。 這看起來像是這樣的:

-(BOOL)touchesShouldBegin:(NSSet *)touches withEvent:(UIEvent *)event inContentView:(UIView *)view {
    UITouch * touch = [touches anyObject];    //Get a touch object
    if (2 == touch.tapCount) {    //If this is a double-tap...
        return NO;                //...don't begin touches
    }
    else {    //Otherwise, call the superclass' implementation
        return YES;
    }
}

但是,為了將Web視圖的滾動視圖設置為自定義子類,您可能還必須子類化UIWebView (通常不贊成)。 話雖如此,它可能會工作UIWebView子類並重新定義scrollView屬性。 在接口文件中:

@interface MyAwesomeWebView : UIWebView {

}

@property (nonatomic, readonly, retain) MyAwesomeScrollView * scrollView;

@end

並在實現文件中:

@implementation

@dynamic scrollView

@end

不過,請謹慎行事。

Pre iOS 5.0:

正如Alan Moore在評論中所寫,您可以在Web視圖頂部添加透明視圖,使用命中測試捕獲所有觸摸事件,並將觸摸事件轉發到Web視圖,除非有雙擊。

編輯:更新的答案,包括有關子類化UIWebView等的警告。編輯2:包含iOS 5.0之前的第二個答案

我認為這樣做的方法是在UIWebView上添加一個UITapGestureRecognizer,然后你可以根據需要過濾雙擊。

您可以在此處找到示例代碼/討論:

將UITapGestureRecognizer添加到UIWebView

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

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