Вы должны представить UIActivityViewController в своем верхнем или последнем контроллере представления. Это может быть, например, navigationController ..
Вы не указали структуру проекта путем вы можете попробовать, например:
if let vc = self.parentViewController {
let shareText = track.name
let shareUrl = NSURL(string: "https://api.test.com/"
let shareVC = UIActivityViewController(activityItems: [shareText, shareUrl], applicationActivities: nil)
shareVC.setValue(shareText, forKey: "subject")
vc.presentViewController(shareVC, animated: true, completion: nil)
}
Если проблема сохраняется, также посмотреть эти строки, если вы тестирования на IPad :
При представлении контроллера вида вы должны сделать это, используя соответствующие средства для текущего устройства. На iPad вы должны представить контроллер просмотра в popover. На iPhone и iPod touch вы должны представить его модально.
if UI_USER_INTERFACE_IDIOM() == UIUserInterfaceIdiom.Phone {
self.presentViewController(shareVC, animated: true, completion: nil)
}
else {
if activityViewController.respondsToSelector("popoverPresentationController") {
activityViewController.popoverPresentationController!.barButtonItem = sender as? UIBarButtonItem
self.presentViewController(shareVC, animated: true, completion: nil)
}
}
Попробуйте сделать тест с:
let shareText: String! = "Hello"
let shareurl: NSURL! = NSURL(string: "http://www.google.com")
(этот тест, потому что я хочу, чтобы исключить какие-либо проблемы вокруг вашего HTTPS URL-адрес, utf8 кодировке и некоторые странности вокруг shareText)
Чтобы запомнить: Согласно форуму Apple here:
Симулятор не поддерживает почту. Вероятно, вам следует попробовать проверить функцию на устройстве.
Update: Чтобы изолировать проблему почты, попробуйте использовать этот класс:
import Foundation
import UIKit
import MessageUI
class ViewController: UIViewController, MFMailComposeViewControllerDelegate {
override func viewDidLoad() {
super.viewDidLoad()
}
@IBAction func sendEmailButtonTapped(sender: AnyObject) {
let mailComposeViewController = configuredMailComposeViewController()
if MFMailComposeViewController.canSendMail() {
self.presentViewController(mailComposeViewController, animated: true, completion: nil)
} else {
self.showSendMailErrorAlert()
}
}
func configuredMailComposeViewController() -> MFMailComposeViewController {
let mailComposerVC = MFMailComposeViewController()
mailComposerVC.mailComposeDelegate = self // Extremely important to set the --mailComposeDelegate-- property, NOT the --delegate-- property
mailComposerVC.setToRecipients(["[email protected]"])
mailComposerVC.setSubject("Sending you an in-app e-mail...")
mailComposerVC.setMessageBody("Sending e-mail in-app is not so bad!", isHTML: false)
return mailComposerVC
}
func showSendMailErrorAlert() {
let sendMailErrorAlert = UIAlertView(title: "Could Not Send Email", message: "Your device could not send e-mail. Please check e-mail configuration and try again.", delegate: self, cancelButtonTitle: "OK")
sendMailErrorAlert.show()
}
// MARK: MFMailComposeViewControllerDelegate Method
func mailComposeController(controller: MFMailComposeViewController!, didFinishWithResult result: MFMailComposeResult, error: NSError!) {
controller.dismissViewControllerAnimated(true, completion: nil)
}
}
Как использовать, например:
var emailTitle = "Feedback"
var messageBody = "Feature request or bug report?"
var toRecipients = ["[email protected]", "[email protected]"]
var mc:MFMailComposeViewController = MFMailComposeViewController()
mc.mailComposeDelegate = self
mc.setSubject(emailTitle)
mc.setMessageBody(messageBody, isHTML: false)
mc.setToRecipients(toRecipients)
Некоторые подробности и обсуждение here ..
Я не вижу вопрос. –