【问题标题】:UIViews SetNeedsDisplay not calledUIViews SetNeedsDisplay 未调用
【发布时间】:2015-02-23 19:55:40
【问题描述】:

新手警报! : ) 我的应用程序中有多个视图,所有视图都设置在故事板中,并且都有自己的子类 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()
        }
    }
}

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

import UIKit

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

所以我用谷歌搜索和搜索,但就是不知道出了什么问题。是的,这是我使用 Swift 和 iOS 的第一周……

【问题讨论】:

    标签: ios xcode swift uiview setneedsdisplay


    【解决方案1】:

    在Storyboard上的View和DrawGraph之间创建一个outlet,假设你命名为DrawGraphV,确保view是Custom class DrawGraph,不需要updateModell方法,直接调用DrawGraphV.SetNeedsDisplay

    【讨论】:

    • 虽然你的答案的核心是正确的,但对于不熟悉编程语言的OP来说它是模糊的,如果可能的话,请提供一个代码示例,让你的答案更清楚。
    • 嘿嘿,OP对编程语言不是那么陌生; ) 不多
    【解决方案2】:

    这是您给updateModell的电话:

    DrawGraph().updateModell()
    

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

    我不知道您为什么决定尝试实现自己的Button 类。你有什么不喜欢UIButton的原因吗?

    实现这一点的正常方法是将counter 属性放入您的视图控制器(或您的视图控制器引用的模型对象中)。视图控制器还引用了按钮和现有的DrawGraph。将按钮的“Touches Ended”事件连接到视图控制器中的IBAction 方法。在IBAction 方法中,更新计数器,更新按钮的标签(或其他),并将updateModell 发送到DrawGraph 的现有实例。

    【讨论】:

    • 谢谢!我现在特别明白的是,我懂的很少,我只是一个设计师,被告知编程没那么难; )
    • 但也许你可以告诉我如何将 updateModell 发送到 DrawGraph 的现有实例?
    • 我不能告诉你,因为它非常特定于你的应用程序的编写方式。听起来您需要通过更多教程来学习面向对象编程和 iOS 编程的基本概念。
    • 好吧,听起来我以前的边做边学的方法在这里不像往常一样奏效。谢谢。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多