0

私の XCode 上のシングル ビュー アプリケーションには、iPhone の全画面の約半分のサイズのカスタム ビューがあります。カスタム ビュー内でのみ使用できる描画ツールを実装しました。カスタム ビューは、描画ツールが移動した距離を記録します。ViewController を 1 つだけ使用して、距離変数をカスタム ビュー フレームの外側の Label に表示したいと考えています。これを行うには、プロトコルとデリゲートを使用する必要がありますか? それとももっと簡単な方法がありますか?過去数日間、プロトコルとデリゲートの方法をテストしてきましたが、どこにも行きませんでした。

4

2 に答える 2

1

最初にインターフェイス ビルダーでカスタム ビューをメイン ビュー コントローラー ビューのサブビューとして追加し、ラベルも追加します。次に、ラベルとビューのアウトレットをView Controllerに追加します(それぞれdistanceLabelとdrawViewと呼びましょう)。

ここで、distanceDrawn をカスタム ビューのプロパティとして宣言し、ツールが移動されたときに、正しい数値を含むように更新します。

次に、View Controller の viewDidLoad に以下を追加します。

    [drawView addObersver:self forKeyPath:@"distanceDrawn" options:NSKeyValueObservingOptionNew context:null]

また、コントローラーに追加します。

    - (void)observeValueForKeyPath:(NSString *)keyPath ofObject:(id)object change:(NSDictionary *)change context:(void *)context
    {
        if ([object isEqual:drawView]) {
            id distance = change[NSKeyValueChangeNewKey]; //change to appropriate type
            distanceLabel.text = [NSString stringWithFormat:@"%@", distance];
        }
    }

これで、distanceDrawn を変更するたびに、このメソッドが呼び出され、change と呼ばれるディクショナリに、新しく設定された key の値が含まれますNSKeyValueChangeNewKey。値を取得すると、ラベルを更新できます。

于 2013-06-19T21:53:23.110 に答える
0

カスタム ビューには、図面の長さのプロパティが必要です。その後、カスタム ビューへの参照を持つ任意のクラスから値を読み取ることができます。

おそらく、描画の長さが長くなるたびにView Controllerにラベルを更新させたいと思うでしょう。Key-Value Observing でそれを処理できます。drawingLength プロパティが変更されたときに、カスタム ビュー オブジェクトからの通知を登録します。

デリゲートを使用してこれを行うことができます。場合によっては、それがよりクリーンなソリューションだと思います。カスタム ビューからリッスンできる更新の種類が明確になっていると便利です。ただし、この種のケースはまさに Key-Value Observing が意図しているものです。

于 2013-06-19T21:45:56.867 に答える