UIView 中的 Swift 共享表

Posted

技术标签:

【中文标题】UIView 中的 Swift 共享表【英文标题】:Swift Share sheet in UIView 【发布时间】:2016-08-31 15:24:15 【问题描述】:

我有一个 UIView 类,想分享一个 URL 链接,在 UIView 中添加分享表的正确方法是什么?

我当前的代码正在尝试通过单击按钮来调用共享表:

//share app
@IBAction func shareAppBtn(sender: AnyObject ) 
    print("shareAppBtn tapped")
    let myWebsite = NSURL(string:"http://www.google.com/")

    guard let url = myWebsite else 
        print("nothing found")
        return
    

    let shareItems:Array = [url]
    let activityViewController:UIActivityViewController = UIActivityViewController(activityItems: shareItems, applicationActivities: nil)
    self.window?.rootViewController!.presentViewController(activityViewController, animated: true, completion: nil)


我尝试使用当前 UIView 的根视图但收到错误:

Warning: Attempt to present <UIActivityViewController: on <RAMAnimatedTabBarController.RAMAnimatedTabBarController: which is already presenting <SideMenu.UISideMenuNavigationController: Attempting to load the view of a view controller while it is deallocating is not allowed and may result in undefined behavior (<UIAlertController:)

谢谢。

【问题讨论】:

你为什么在 rootViewController 上调用presentViewController?尝试不使用self.window?.rootViewController!. 我最初确实尝试过,但是由于我是从 UIView 调用它,所以这给了我一个错误,错误是:Use of unresolved identifier 'presentViewController' 你必须在 viewController 上调用它,是的。你的按钮和你的 UIView 以及以某种方式在 viewController 中? 我的按钮在 UIView 内,由于某些原因它不能在 viewController 内。 也许这个帖子可以帮助你:***.com/questions/15622736/… 【参考方案1】:

您不会在 UIView 中添加共享表。共享表是一个视图控制器,因此它总是需要另一个视图控制器来提供展示的上下文。

您已通过使用当前视图的根视图来完成此操作,该视图已呈现导航控制器UISideMenuNavigationController

尝试从该上下文中呈现:

sideMenuNavigationController.presentViewController(activityViewController, animated: true, completion: nil)

【讨论】:

谢谢你,但不幸的是这没有用,我收到Use of unresolved identifier 'sideMenuNavigationController' 错误。我想我得到了无法调用共享表的概念,因为我在 UIView 中,如果它是另一个视图控制器,这会更容易。 请检查导航控制器在代码中的实际命名方式。这只是来自您的错误消息上下文的猜测。 啊,我的错,试图调用具有SideMenu 类的根视图的导航控制器是UISideMenuNavigationController,但是我也遇到了同样的错误:Use of unresolved identifier 'UISideMenuNavigationController' 在您的视图层次结构中的某处,有一个 UISideMenuNavigationController 似乎位于视图层次结构的顶部。您可以尝试从该视图控制器中找到它并呈现吗? UISideMenuNavigationController 是我在 Story Board 中创建的导航控制器,它具有 SideMenu 的根视图,如何在我的 SideMenu UIView 中显示此导航控制器?

以上是关于UIView 中的 Swift 共享表的主要内容,如果未能解决你的问题,请参考以下文章

Swift3 和 Segue:两个不同的 UITableViewController 指向一个 UIView

在 Swift 中的 UIView 上绘制网格

根据 Swift 中的 UILabel 文本调整 UIView 高度

UIView 类中的 Swift 集合视图委托

Swift3 中的 UIView 动画

swift2.0中的UIView问题