1

値(NSInteger)が特定の値を下回ったときにセレクターを実行する必要があるUIViewのカスタムサブクラスがあります。ドキュメントからわかることから、この変更を探すためにオブザーバーオブジェクトを設定する必要があります。

NSInteger値はViewControllerに存在し、UIViewサブクラスは同じViewControllerのサブビューとして実装されます。

次のようなものが正しい方向に進んでいるかどうか疑問に思います。

-(void)createNotification:
[[NSNotificationCenter defaultCenter]
                       addObserver:self //since this is in the viewController, I'm thinking it's "self"
                       selector:@selector(genCountLow:)
                       name:@"ReviewGenCount"
                       object: nil ];      

このオブザーバーがアクションを実行するための条件をどこに追加するかで苦労しています。たとえば、条件が次のようになる場合:

if(genCount < 3) {
///code statement
}

オブザーバーに上記の変更を探してから、後続のアクションを実行してもらいたい。このように通知オブジェクトに追加しますか?

- (void)genCountLow:(NSNotification *)notification {
    if (genCount < 3) {
[electricalSystemDiagramView depowerShedBuses];
}

}
4

2 に答える 2

2

ビューがこの決定を行うべきではありません。ビューコントローラが行う必要があります。通常、ビューにモデルまたはコントローラーの実装に関する情報が必要な状況は避けてください。

代わりに、ビューにフラグ(たとえば、 。BOOLという名前のプロパティ)を設定する必要がありますdrawLowState。この値が変更された場合は、次のようにして、ビューを別の外観で再描画する必要があります。

YourView.mの場合:

- (void)setDrawLowState:(BOOL)isLow
{
    if(drawLowState != isLow)
    {
        drawLowState = isLow;
        [self setNeedsDisplay];
    }
}

プロパティの値に基づいて、ビューオブジェクトの描画ルーチンで描画するものを変更することにより、ビューの外観を変更しdrawLowStateます。

ビューコントローラは整数値がいつ変更されるかを知っているので、整数プロパティのセッターで簡単に決定を下し、ビューにその外観を更新するように指示できます。

YourViewController.mの場合:

- (void)setGenCount:(NSInteger)aCount
{
    genCount = aCount;
    self.view.drawLowState = (genCount < 3);
}
于 2010-01-22T04:20:57.153 に答える
0

通知を投稿するためのコードをビュークラスに配置します。次のようなもの:

- (void)setFrobs:(NSInteger)frobs {
    if (frobs < 3 && _frobs >= 3)
        [[NSNotificationCenter default...] postNotificationName:...];
    _frobs = frobs;
}

次に、フロブの値を変更するときは、常にsetFrobsを使用してください。念のために言っておきますが、私はあなたのビュークラスについて何も知りません。

于 2010-01-22T03:49:01.683 に答える