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