gpt4 book ai didi

ios - 从 UIView 调用共享表

转载 作者:行者123 更新时间:2023-11-30 13:06:39 26 4
gpt4 key购买 nike

试图解决我面临的问题。我想按下按钮并通过共享表共享 URL。这是我到目前为止所拥有的:

import UIKit
class SideMenu: 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.presentViewController(activityViewController, animated: true, completion: nil)
}
}

这给了我以下错误:“SideMenu”类型的值没有成员“presentViewController”。我认为上面的方法不起作用,因为presentViewController是UIViewcontroller的一个组件,并且我是从UIView调用它的。

所以我尝试了以下方法,尝试调用 UIViewcontroller:

import UIKit
class SideMenu: UIView {
//share app
@IBAction func shareAppBtn(sender: AnyObject, viewController : UIViewController) -> Void
{
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)
viewController.presentViewController(activityViewController, animated: true, completion: nil)
}
}

但上面给出了以下错误:无法识别的选择器发送到实例 0x7fe93acb6720'

所以我最终尝试了:

import UIKit
class SideMenu: 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)
}
}

但是上面给了我以下错误:

Warning: Attempt to present <UIActivityViewController: 0x7fe03e04c600>  on <RAMAnimatedTabBarController.RAMAnimatedTabBarController: 0x7fe03bc4a170> which is already presenting <SideMenu.UISideMenuNavigationController: 0x7fe03c094200>

我在这里缺少什么?我想在 UIView 上调用共享表。

谢谢。

最佳答案

这按预期工作。UIView 不应该呈现 View 。他们应该向负责处理此事的代表报告。

对于 SideMenu(您的 UIView)来说,您需要一个委托(delegate)来处理它正在执行的操作...例如设置将 SideMenu 呈现为委托(delegate)的 View Controller ..

所以使用一些我编写的示例代码..

protocol SideMenuDelegate {

func sideMenuDidShare()

}

委托(delegate)协议(protocol)是处理 SideMenu View 的 View Controller 将实现的协议(protocol)。

class SideMenu: UIView {
var delegate: SideMenuDelegate?
}

在 SideMenu View 类中,您需要添加一个委托(delegate)属性。

class SideMenuViewController: UIViewController, SideMenuDelegate {

func sideMenuDidShare() {
print("this is where your share code goes and where you can present other viewControllers from")
}

override func viewDidLoad() {
super.viewDidLoad()

let sideMenu = self.view as? SideMenu
sideMenu?.delegate = self

}

}

在处理 SideMenu 的 View Controller 中,您可以实现 SideMenuDelegate 协议(protocol),例如SideMenuViewController 类:UIViewController、SideMenuDelegate

这样做可以让你的 SideMenu 在发生事情时告诉它的委托(delegate)(ViewController),在本例中,是实现的 func sideMenuDidShare()

关于ios - 从 UIView 调用共享表,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/39284055/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com