Как представить новый экран без UIViewController в Swift 4? - PullRequest
0 голосов
/ 20 января 2020

Я не реализовал UIViewController, потому что я уже унаследовал от другого класса, и он выдает ошибку, что подарок не является членом этого класса

func shareAppLink() {           
    let name = "http://aijaz.com"
    let items = [name] as [Any]

    let ac = UIActivityViewController(activityItems: items, applicationActivities: nil)
    present(ac, animated: true)     
}

Ответы [ 3 ]

2 голосов
/ 20 января 2020

Вы также можете использовать Respoder Chain, чтобы получить родительский контроллер представления для представления

extension UIView {
    var parentViewController: UIViewController? {
        var parentResponder: UIResponder? = self
        while parentResponder != nil {
            parentResponder = parentResponder!.next
            if let viewController = parentResponder as? UIViewController {
                return viewController
            }
        }
        return nil
    }
}

И объявить вашу функцию shareAppLink как

func shareAppLink(sender : UIView) {
    let name = "http://aijaz.com"
    let items = [name] as [Any]
    let ac = UIActivityViewController(activityItems: items, applicationActivities: nil)
    sender.parentViewController(ac, animated: true)
}

, затем в didSelectRowAt вы можете вызвать ее как:

self.shareAppLink(sender : cell)
1 голос
/ 20 января 2020

present(_:animated:completion:) - это метод UIViewController, поэтому он должен вызываться для некоторого типа UIViewController.

Если ваш класс изначально создан контроллером представления, то вы можете попробовать передать ссылка, использующая шаблон делегирования :

Делегирование - это простой и мощный шаблон, в котором один объект в программе действует от имени или в координации с другим объектом. Делегирующий объект сохраняет ссылку на другой объект - делегат - и в соответствующее время отправляет ему сообщение. Сообщение информирует делегата о событии, которое делегируемый объект собирается обработать или только что обработал.

Если вы создали протокол для своего пользовательского класса, примерно так:

protocol MyClassDelegate {
    func shareAppLink()
}

Тогда вы могли бы соответствовать этому протоколу в вашем View Controller и вызывать метод примерно так: delegate.shareAppLink()

0 голосов
/ 20 января 2020

Вы должны унаследовать подкласс UIViewController или класс UIViewController. Таким образом, ошибка должна быть устранена.

...