UIView在运行时不会改变

时间:2016-04-20 20:00:43

标签: ios swift uiview

我已经在其他变体中使用了这个功能,但似乎在从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()时列出所有子视图时,它们看起来都是正确的。甚至在运行时。但显示不会更新。所以有些东西没有得到这个词。我在搜索类似问题后尝试禁用自动布局,但没有看到差异。

2 个答案:

答案 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)

所以这很烦人,我浪费了一天中最好的一部分。但再次感谢你的帮助。