[英]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
以顯示其內容,並可通過UIWebView
的scrollView
屬性訪問。 因此,一種可行的方法是將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,然后你可以根據需要過濾雙擊。
您可以在此處找到示例代碼/討論:
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.