Я хочу знать, как назывался viewController при нажатии кнопки.Я уже изучил ответ, предоставленный здесь .Но я верю, что это не сработает, если у меня на экране будут разные контейнерные виды ... где viewController для каждой кнопки может быть разным.Следовательно, мне нужно другое решение.
Поэтому я написал эту функцию для рекурсивного просмотра, пока она не найдет UIViewController
.
extension UIView{
func getTypeOfMyViewController() -> UIViewController.Type?{
if let _super = superview as? UIViewController{ // logically wrong!
return type(of:_super)
}else if let _super = superview{
return _super.getTypeOfMyViewController()
}else{
assertionFailure("everything should end up being on some viewController")
return nil
}
}
}
Единственная проблема - это строка:
if let _super = superview as? UIViewController{
Это дает мне следующее предупреждение:
В ролях из 'UIView?'к несвязанному типу 'UIViewController' всегда происходит сбой
superview
- это UIView
, и я не знаю, как извлечь 'viewController', который содержит 'view' ,
Вопрос1: Итак, как мне это сделать?
Кроме того, я хотел бы использовать функцию getTypeOfMyViewController
как таковую:
extension UIButton{
open override var accessibilityLabel: String?{
get {
return "\(getTypeOfMyViewController.self): \(titleLabel?.text ?? "Null")"
}
set{
// nothing particular
}
}
}
Я делаю это потому, что хочу создать уникальный идентификатор для всех нажатий кнопок в моей системе ведения журналов.
Вопрос2: Предлагает ли Swift какое-либо более простое решение этой проблемы?