我有一个带有MainTableVC(UIViewController
)的MainVC(UITableView
)和另一个嵌套的SubTableVC(UITableView
)。
它们都有MainVC作为delegate
和dataSource
,每个都有自己的restorationIdentifier
所以我可以在调用委托或dataSource函数时区分它们。
以下是一个例子:
func tableView(_ tableView: UITableView, numberOfRowsInSection section: Int) -> Int {
switch tableView.restorationIdentifier {
case "MainTableVCID":
return 10
case "SubTableVC":
return 5
default:
return 0
}
}
这非常棒。但我在这里遇到的一个问题是:
我有一个UIPickerView,它是MainVC视图的子视图,它被限制在MainVC视图的下方,受到如下约束:
private let pickerView: UIPickerView = {
let picker = UIPickerView()
picker.backgroundColor = UIColor.lightGray
picker.translatesAutoresizingMaskIntoConstraints = false
return picker
}()
private var pickerViewBottomAnchor: NSLayoutConstraint?
override func viewDidLoad() {
super.viewDidLoad()
//other init code..
view.addSubview(pickerView)
pickerView.widthAnchor.constraint(equalTo: view.widthAnchor).isActive = true
pickerView.heightAnchor.constraint(equalToConstant: 180).isActive = true
pickerViewBottomAnchor = pickerView.bottomAnchor.constraint(equalTo: view.bottomAnchor, constant: 180)
pickerViewBottomAnchor?.isActive = true
pickerView.centerXAnchor.constraint(equalTo: view.centerXAnchor).isActive = true
}
在嵌套的tableView(SubTableVC)中,tableView:didSelectRowAtIndexPath:
我希望将NSLayoutConstraint的常量设置为等于零的颜色。
但是,此时,当我使用控制台打印对象时,我得到pickerViewBottomAnchor = nil(po self。pickerViewBottomAnchor?.constant)//prints nil
。
这是我使用的代码:
func tableView(_ tableView: UITableView, didSelectRowAt indexPath: IndexPath) {
if tableView.restorationIdentifier == "SubTableVC" {
pickerViewBottomAnchor?.constant = 180
self.view.layoutIfNeeded()
}
}
答案 0 :(得分:1)
首先将didSelectRowAt
功能更改为:
func tableView(_ tableView: UITableView, didSelectRowAt indexPath: IndexPath) {
if pickerViewBottomAnchor?.constant != 0 {
pickerViewBottomAnchor?.constant = 0
} else {
pickerViewBottomAnchor?.constant = 180
}
UIView.animate(withDuration: 0.5) {
self.view.layoutIfNeeded()
}
}
使用它,在 表中选择一行应交替向上或向下滑动选择器视图。
如果它没有做任何事情,那么您(可能)没有正确设置您的表格视图.delegate
属性。
如果