2010-09-01 61 views
3

我在想如何重写UIActionSheet,当点击并在UIWebView的链接上按住手指时(显示链接和打开和复制按钮) 。我需要在警报中添加一个按钮,但我不知道如何自定义它。如何自定义UIWebView点击按住链接图表

有没有人有关于如何解决这个问题的想法?

+0

没有人有一个解决方案吗? – Pripyat 2010-09-03 06:53:02

+0

我认为这是UIWebView的行为。 您可以尝试使用GestureRecognizers来完成自己的操作... – 2010-09-04 16:58:43

+0

对于AppStore应用程序? – kennytm 2010-09-04 17:01:03

回答

3

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

仍然:这是hacky,并可能很容易在下次更新中突破。

添加观察:

[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 { ... } 
+0

出于某种原因,' - (void)observeValueForKeyPath:(NSString *)keyPath ofObject:(id)object change:(NSDictionary *)更改 上下文:(void *)context'永远不会被调用,虽然我添加了观察者:/ – Pripyat 2010-09-08 15:45:28

+0

您是否设置了一个断点来检查实际调用的观察结果?一种可能的解决方案是简单地对UIWebView进行子类化并覆盖addSubview:等等。在那里只需触发kvo通知,并且希望它能够工作。当我有标签栏控制器时, – 2010-09-09 13:48:31

+0

没有被调用 – 2014-02-04 13:30:13