【发布时间】:2018-11-09 18:14:25
【问题描述】:
我有 3 个UIViewControllers。 ContainerVC 包含 2 个 ContainerView。第一个容器视图是DashboardVC,第二个是SidebarVC。 DashboardVC 覆盖整个屏幕,而SidebarVC 在外面。
我对应该动画的SidebarVC 有一个主要约束,SidebarVC 应该滑入(从左侧)。在DashboardVC 我有一个UIBarButtonItem,当它被按下时它应该执行动画。问题是我对委托做错了什么,当ContainerVC 符合协议时,什么也没有发生。
PS:尽管我看过很多关于这个概念的不同视频,但我很难理解协议/代表。代码如下:
DashboardVC
protocol SideBarDelegate {
func showMenu()
func hideMenu()
}
class DashboardVC: UIViewController {
var delegate: SideBarDelegate?
var isSideMenuOpen = true
@IBAction func menuButtonPressed(_ sender: UIBarButtonItem) {
if isSideMenuOpen {
delegate?.showMenu()
isSideMenuOpen = false
}
else {
delegate?.hideMenu()
isSideMenuOpen = true
}
}
}
容器VC
class ContainerVC: UIViewController {
@IBOutlet weak var sideBarMenuLeadingConstraint: NSLayoutConstraint!
}
extension ContainerVC : SideBarDelegate {
func showMenu() {
sideBarMenuLeadingConstraint.constant = -290
UIView.animate(withDuration: 0.3) {
self.view.layoutIfNeeded()
}
}
func hideMenu() {
sideBarMenuLeadingConstraint.constant = 0
UIView.animate(withDuration: 0.3) {
self.view.layoutIfNeeded()
}
}
}
【问题讨论】:
-
在委托的调用上设置断点。您将看到它是空的,因为您从未为委托分配值。这样做的方式与向 tableview.delegate 属性添加值的方式相同
-
呃,是的,它确实说它是零。但我不太确定该怎么做。
标签: swift xcode uiviewcontroller delegates protocols