#ios #swift #xcode #macos #mobile
#iOS #swift #xcode #macos #Мобильный
Вопрос:
Я пытаюсь создать процесс проверки в 4 шага, чтобы сделать мой код более эффективным, я решил использовать дочерние представления и просто соответствующим образом обновить пользовательский интерфейс. Мне удалось добавить мой дочерний вид в мой MasterView, однако я не могу нажать кнопку внутри моего дочернего представления.
Я уже проверил иерархию представлений, и над моей кнопкой ничего нет. Я также попытался добавить действие программно, повторно добавил кнопку, но я не могу заставить ее работать. Я новичок в разработке Swift, поэтому, вероятно, я что-то упускаю.
Код дочернего представления
protocol IdentityVerificationIntroChildViewControllerDelegate{
func startVIProcess(_ sender: Any)
}
class IdentityVerificationIntroChildViewController: UIView{
@IBOutlet var contentView: UIView!
var delegate: IdentityVerificationIntroChildViewControllerDelegate?
@IBOutlet weak var mStartVIBtn: UIButton!
override init(frame: CGRect){
super.init(frame: frame)
commonInit()
}
required init?(coder aDecoder: NSCoder){
super.init(coder: aDecoder)
commonInit()
}
private func commonInit(){
Bundle.main.loadNibNamed("IdentityVerificationIntroChildView", owner: self, options: nil)
mStartVIBtn.addTarget(self, action: #selector(buttonAction), for: .touchUpInside)
addSubview(contentView)
contentView.frame = self.bounds
contentView.autoresizingMask = [.flexibleHeight, .flexibleWidth]
}
@objc func buttonAction(sender: UIButton!) {
print("works")
}
}
Код основного представления
final class MasterIdentityVerificationViewController: UIViewController {
@IBOutlet weak var mContainerView: UIView!
@IBOutlet weak var mStepIndicator: StepIndicatorView!
private var currentView: UIView?
override func viewDidLoad() {
super.viewDidLoad()
setChildView(subView: IdentityVerificationIntroChildViewController())
}
private func setChildView(subView: UIView){
currentView?.removeFromSuperview()
currentView = subView
currentView?.translatesAutoresizingMaskIntoConstraints = false
guard let currentView = currentView else { return }
mContainerView.addSubview(currentView)
NSLayoutConstraint.activate([
currentView.topAnchor.constraint(equalTo: mContainerView.topAnchor),
currentView.trailingAnchor.constraint(equalTo: mContainerView.trailingAnchor),
currentView.leadingAnchor.constraint(equalTo: mContainerView.leadingAnchor),
currentView.bottomAnchor.constraint(equalTo: mContainerView.bottomAnchor)
])
}
}
extension MasterIdentityVerificationViewController: IdentityVerificationIntroChildViewControllerDelegate{
func startVIProcess(_ sender: Any) {
performSegue(withIdentifier: "fromVIIntroToVIIDCapture", sender: sender)
print("adfsdfs")
}
}
Иерархия просмотра, проблемная кнопка выделена
Зеленая область — это место, где переключаются дочерние представления
Я был бы очень признателен за любую помощь. Спасибо
Комментарии:
1. Немного вводит в заблуждение наличие «viewcontroller» в имени представления. В любом случае, вам необходимо настроить
userInteractionEnabled=true
дочерние представления2. @Paulw11 Спасибо за ваш ответ, я безуспешно пробовал эти строки внутри моего дочернего представления mStartVIBtn.isUserInteractionEnabled = true contentView.isUserInteractionEnabled = true
3. Вам нужно
self.isUserInteractionEnabled=true
, посколькуself
ваш родительский вид и простыеUIView
s по умолчанию не взаимодействуют с пользователем.