0

初心者アラート!:) 私のアプリには複数のビューがあり、すべてがストーリー ボードに設定されており、すべて独自のサブクラス化された UIView クラスと、独自の上書きされた drawRect メソッドがあります。そのうちの 1 つはボタンとして機能し、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()
        }
    }
}

現在の問題は、updateModelll 関数が呼び出されたにもかかわらず、この関数の setNeedsDisplay が機能しなかったことです。

import UIKit

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

だから私はググってググったが、何が悪いのか分からない。はい、今週は Swift と iOS を使用する最初の週です...

4

2 に答える 2

0

View on Storyboard と DrawGraph の間にアウトレットを作成します。DrawGraphV という名前を付けるとします。ビューがカスタム クラス DrawGraph であることを確認してください。メソッド updateModell は必要ありません。DrawGraphV.SetNeedsDisplay を直接呼び出すだけです。

于 2015-04-21T19:52:12.917 に答える
0

への呼び出しは次のupdateModellとおりです。

DrawGraph().updateModell()

この行は、 の新しいインスタンスを作成DrawGraphし、メッセージを送信しupdateModellます。のこの新しいインスタンスはDrawGraph、ビュー階層にありません。の他のインスタンスとは別のものですDrawGraph。のこの新しいインスタンスを参照するものがないためDrawGraph、このインスタンスは返された直後に削除されupdateModellます。updateModellこの への呼び出しが画面に影響を与えない理由がわかりましたか?

Button独自のクラスを実装しようと決めた理由がわかりません。嫌いな理由がありますUIButtonか?

これを実装する通常の方法counterは、ビュー コントローラー (またはビュー コントローラーによって参照されるモデル オブジェクト) にプロパティを配置することです。ビュー コントローラには、ボタンと既存の への参照もありますDrawGraph。ボタンの「Touches Ended」イベントをIBActionView Controllerのメソッドに接続します。このIBActionメソッドでは、カウンターを更新し、ボタンのラベル (またはその他のもの) を更新しupdateModellて、既存の のインスタンスに送信しますDrawGraph

于 2015-02-23T20:18:31.987 に答える