【问题标题】:Custom URL Handling iOS xamarin自定义 URL 处理 iOS xamarin
【发布时间】:2014-02-15 23:14:57
【问题描述】:

我正在尝试设置我的应用程序,以便可以将 NSUrl 属性添加到 textview 的指定子字符串,当触摸该 NSUrl 时,它会推送一个新视图而不是打开一个新 url。

我在我的 AppDelegate.cs 类中覆盖 OpenURL,并使用 url 发送通知

public override bool OpenUrl (UIApplication application, NSUrl url, string sourceApplication, NSObject annotation)
{
        NSNotificationCenter.DefaultCenter.PostNotification (NSNotification.FromName ("ArtistDetail", url));

        return true;
}

然后在包含文本视图的类中,在构造函数中添加观察者

NSNotificationCenter.DefaultCenter.AddObserver ("ArtistDetail", delegate{artistDetail(null);});

还有我的方法

    public void artistDetail (NSNotification notification)
    {
        //push view based on info in notification.object
    }

我没有运气。我发现这篇文章Can't push view controller after overriding openURL 有人在目标 C 中以同样的方式做到了这一点。一个问题 - 我在我的 OpenURL 覆盖中放置了断点和日志注释,但它们没有被命中。当您单击/点击一个 NSSUrl 时,它是否默认调用 OpenUrl?如果是这样,为什么我的覆盖没有被击中?

【问题讨论】:

  • @JiaYow 我的问题不是如何将 URL 添加到 textview。我的问题是如何在触摸 URL 时动态处理它
  • 我链接的问题有一个答案,可以解释为什么你的 OpenUrl 没有被调用。
  • @JiaYow 我的链接显示出来并且是可点击的——如果链接是常规超链接,它甚至会按预期工作——但是,它不会通过我重写的 OpenUrl 方法。
  • 您的 Xamarin 版本怎么样?我用谷歌搜索了一下,发现了这个:forums.xamarin.com/discussion/12306/openurl-not-being-called - 也许你有同样的问题?

标签: ios xamarin.ios


【解决方案1】:

我花了 6 个小时研究如何做到这一点。当然,在我在 SO 上发布问题 20 分钟后,我就找到了答案。

我必须实现一个 UIApplication 子类,覆盖那里的方法,注册它,然后在我的 Main.cs 中将它作为 UIApplication 启动。

UIApplicationMain.cs

[Register ("UIApplicationMain")]
public class UIApplicationMain : UIApplication
{
    public UIApplicationMain ()
    {
    }

    public override bool OpenUrl (NSUrl url)
    {
        NSNotificationCenter.DefaultCenter.PostNotification (NSNotification.FromName ("ArtistDetail", url));

        return true;

    }
}

Main.cs

public class Application
{
    // This is the main entry point of the application.
    static void Main (string[] args)
    {
        // if you want to use a different Application Delegate class from "AppDelegate"
        // you can specify it here.
        UIApplication.Main (args, "UIApplicationMain", "AppDelegate");
    }

}

显示超链接的视图控制器,应动态处理以推送所需的视图控制器

public override void ViewDidLoad ()
{
        base.ViewDidLoad ();

        NSNotificationCenter.DefaultCenter.AddObserver ("ArtistDetail", artistDetail);
}
public void artistDetail (NSNotification notification)
{
        NSUrl artistName = (NSUrl)notification.Object;

        String name = artistName.AbsoluteString;
        this.NavigationController.PushViewController (new ArtistDetailViewController (name), true);
 }

对于任何试图解决“如何在 UITextView 中放置按钮”问题的人 (就像推特对#hastags 和@users 所做的那样)——就是这样!将文本放入 NSAttributedString 中,将链接属性应用到您想要充当按钮的文本,并进行相应处理。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2014-02-23
    • 2023-04-01
    • 1970-01-01
    • 1970-01-01
    • 2012-01-02
    • 1970-01-01
    • 2019-12-16
    相关资源
    最近更新 更多