1

我有一个 UIView 的自定义子类,当值(NSInteger)低于某个值时需要执行选择器。从我从文档中可以看出,我需要设置一个观察者对象来寻找这种变化。

NSInteger 值存在于视图控制器中,并且 UIView 子类实现为同一视图控制器中的子视图。

我想知道以下内容是否在正确的轨道上:

-(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;
}

然后,在更改 frobs 的值时始终使用 setFrobs。请注意,我对您的视图类一无所知。

于 2010-01-22T03:49:01.683 回答