【问题标题】:How to customize UIWebView tap-hold-on-link sheet如何自定义 UIWebView 点击保持链接表
【发布时间】:2010-09-01 19:57:39
【问题描述】:

我想知道如何覆盖在点击并按住 UIWebView 中的链接时出现的 UIActionSheet(它显示链接以及打开和复制按钮)。我需要在警报中添加一个按钮,但我不知道如何自定义它。

有人知道如何解决这个问题吗?

【问题讨论】:

  • 我认为这是 UIWebView 的行为。你可以尝试用 GestureRecognizers 做一些你自己的事情......
  • 无法以这种方式访问​​ UIWebView。一定有苹果用​​过的东西,iCab for iPad 也有一个自定义表格:/

标签: objective-c cocoa-touch ipad uikit uiwebview


【解决方案1】:

鉴于不存在这样的 API,您仍然可以以非标准的类似 api 的方式自定义工作表,而无需使用私有 api。最简单的可能是观察该 webview 的子视图,当一个子视图出现时(如弹出窗口)检查它的类,如果它是这样的弹出窗口,则对其进行自定义。这是我尝试的方法。

仍然:这很老套,可能在下一次更新中很容易崩溃。

添加观察:

[myWebView addObserver:self forKeyPath:@"subviews" options:0 context:@"popup"];

然后观察:

- (void)observeValueForKeyPath:(NSString *)keyPath
                      ofObject:(id)object
                        change:(NSDictionary *)change
                       context:(void *)context
{
    if (context == @"popup") {
        for (UIView *view in [object subviews]) {
            if ([view isKindOfClass: [UIAlertView class]])
                 [self customizeAlert: (UIAlertView*)view];
        }
    }
    [super observeValueForKeyPath:keyPath
                         ofObject:object
                           change:change
                          context:context];
}

然后用这样的方法进行自定义:

- (void)customizeAlert:(UIAlertView*)alert { ... }

【讨论】:

  • 出于某种原因,- (void)observeValueForKeyPath:(NSString *)keyPath ofObject:(id)object change:(NSDictionary *)change context:(void *)context 从未被调用,尽管我添加了观察者:/
  • 您是否设置了断点来检查观察是否真正被调用?一种可能的解决方案是简单地将 UIWebView 子类化并覆盖 addSubview: 等。在那里只需触发您自己的 kvo 通知,希望它应该可以工作。
猜你喜欢
  • 2011-07-11
  • 2013-07-31
  • 1970-01-01
  • 2016-10-05
  • 2014-02-25
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多