我已经在其他变体中使用了这个功能,但似乎在从objective-c更改为swift以及将一些设置移入其自己的类中时,我无法想象。
所以我有:
class ViewController: UIViewController, interfaceDelegate, scrollChangeDelegate{
let scrollControl = scrollMethods()
let userinterface = interface()
override func viewDidLoad(){
super.viewDidLoad()
loadMenu("Start")
}
func loadMenu(menuName: String) {
userinterface.delegate = self
userinterface.scrollDelegate = self
userinterface.removeFromSuperview() //no impact
scrollControl.removeFromSuperview() //no impact
userinterface.configureView(menuName)
view.addSubview(scrollControl)
scrollControl.addSubview(userinterface)
}
}
这可以正确设置所有内容但是在运行时更改loadMenu()
时会出现问题。因此,如果用户拨打loadMenu("AnotherMenu")
,则无法更改UIView
。它会调用正确的函数,但不会更新视图。虽然如果我在开始时调用loadMenu("AnotherMenu")
,则会显示正确的菜单。或者,如果我拨打loadMenu("Start")
然后再拨打loadMenu("AnotherMenu")
,则显示的菜单将为" AnotherMenu"。如:
override func viewDidLoad(){
super.viewDidLoad()
loadMenu("Start")
loadMenu("AnotherMenu")
}
当我每次调用loadMenu()
时列出所有子视图时,它们看起来都是正确的。甚至在运行时。但显示不会更新。所以有些东西没有得到这个词。我在搜索类似问题后尝试禁用自动布局,但没有看到差异。
答案 0 :(得分:0)
尝试将setNeedsDisplay()添加到loadMenu
例如
func loadMenu(menuName: String) {
userinterface.delegate = self
userinterface.scrollDelegate = self
userinterface.removeFromSuperview() //no impact
scrollControl.removeFromSuperview() //no impact
userinterface.configureView(menuName)
view.addSubview(scrollControl)
scrollControl.addSubview(userinterface)
view.setNeedsDisplay()
}
setNeedsDisplay()强制视图重新加载用户界面。
答案 1 :(得分:0)
我不想发布整个UIView
课程,因为它很长,而且我认为不相关。但丹是对的,他需要知道那些人在发现答案的原因。所以我创建了一个虚拟UIView
类来支持并打算用这个更新问题。然后我在ViewController的UIView
上放了一个按钮。该按钮能够对假人创建的视图起作用。所以问题出在另一个班级。然而它正在调用ViewController的方法,并且看起来却起作用。那么问题必须是它对实例版本的行为? uiview类的工作方式,它使用performSelector()
。但是在将这些方法变成自己的类时,我只是懒得写了
(ViewController() as NSObjectProtocol).performSelector(selector)
应该是什么时候
(delegate as! NSObjectProtocol).performSelector(selector)
所以这很烦人,我浪费了一天中最好的一部分。但再次感谢你的帮助。