未调用UIViews SetNeedsDisplay

时间:2015-02-23 19:55:41

标签: ios xcode swift uiview setneedsdisplay

新手警报! :)我的应用程序中有多个视图,所有视图都在故事板中设置,并且都有自己的子类UIView类,并且有自己的覆盖drawRect方法。其中一个作为按钮工作,可以通过setneedsdisplay重绘自己并调用另一个UIViews类的函数:

import UIKit

class Button: UIView {
override func touchesEnded(touches: NSSet, withEvent event: UIEvent) {
    super.touchesEnded(touches, withEvent: event)
    let touchPoint: CGPoint! = touches.anyObject()?.locationInView(self)
    if butouched == true{
        if touchPoint.x > bounds.size.width - bounds.size.height && touchPoint.x < bounds.size.width && touchPoint.y > 0 && touchPoint.y < bounds.size.height{
            counter++
            setNeedsDisplay()  //thats the setNeedsDisplay that works
            DrawGraph().updateModell()
        }
    }
}

现在的问题是,即使调用updateModell函数,此函数中的setNeedsDisplay也不起作用:

import UIKit

class DrawGraph: UIView {
func updateModell() {
    setNeedsDisplay() // thats the setNeedsDisplay that doesn't work
} 

所以我用Google搜索并用谷歌搜索但是却无法弄清楚什么是错误的。是的,这是我第一周使用Swift和iOS ......

2 个答案:

答案 0 :(得分:0)

以下是您对updateModell的致电:

DrawGraph().updateModell()

此行创建DrawGraph新实例,并向其发送updateModell消息。 DrawGraph的这个新实例不在您的视图层次结构中。它与DrawGraph的任何其他实例分开。由于没有引用此DrawGraph的新实例,因此在updateModell返回后立即删除此实例。你现在明白为什么这个updateModell的电话对屏幕没有影响了吗?

我不知道您为什么决定尝试实施自己的Button课程。你有什么理由不喜欢UIButton吗?

实现此操作的常规方法是将counter属性放在视图控制器中(或视图控制器引用的模型对象中)。视图控制器还具有对按钮和现有DrawGraph的引用。将按钮的“触摸结束”事件连接到视图控制器中的IBAction方法。在IBAction方法中,更新计数器,更新按钮的标签(或其他),然后将updateModell发送到DrawGraph的现有实例。

答案 1 :(得分:0)

在View on Storyboard和DrawGraph之间创建一个插座,假设你将它命名为DrawGraphV,确保视图是Custom class DrawGraph,你不需要方法updateModell,只需直接调用DrawGraphV.SetNeedsDisplay