一旦调用方法,textField就应该更新

时间:2011-05-12 11:58:26

标签: iphone cocoa-touch ios ipad uitextfield

我正在开展一个处理试卷的项目。我在视图上一次只显示一个问题。在用户回答问题之后,如果用户向左侧滑动,则显示第二个问题。

我已经放置了一个textField来显示每个时间点的分数。我实现了它,但只有当用户导航到下一个问题时我的分数才会更新。 我的要求是,只要问题得到解答,分数就应该在textField中更新。

scoreField.text=[NSString stringWithFormat:@"%d",currentScore];

每当问题得到解答时,是否有任何技巧可以这样做?我的论文有20个问题,有20个提交按钮,所以我不能将上面的代码放在每个提交按钮动作方法中。这将是丑陋而无效的编程。

如果有办法解决我的情况,请提供帮助。

提前致谢

3 个答案:

答案 0 :(得分:2)

如果您正确理解了问题,那么您不希望在每个提交按钮处理程序中设置scoreField.text。我假设您在导航到下一个问题时设置此项。您只需在更改currentScore时更新此内容。所以我认为最好为currentScore创建一个setter并从中更新scoreField.text。像这样:

- (void)setCurrentScore:(NSInteger)newScore {
    currentScore = newScore;
    scoreField.text=[NSString stringWithFormat:@"%d",currentScore];
}

每当您需要更改分数时,请致电setCurrentScore。或者甚至更好,您可以使用setter属性并编写自己的setter实现。

答案 1 :(得分:0)

这可以做得非常简单,优雅。有几个假设:

  • 可以使用全局可访问的模型对象来保存分数,例如+[Examination sharedExammination]
  • 模型对象具有KVO(键值观察)兼容属性,如score
  • 您使用UILabel的自定义子类来显示分数。

通过这些假设,您可以让自定义UILabel注册KVO更改为score属性并自动更新。 UILabel子类的实现包括以下内容:

-(id)initWithFrame:(CGRect)frame 
{
    self = [super initWithFrame:frame];
    if (self) {
        [[Examination sharedExamination] addObserver:self
                                          forKeyPath:@"currentScore"
                                             options:0
                                             context:NULL];
    }
    return self;
}
-(void)dealloc 
{
    [[Examination sharedExamination] removeObserver:self
                                         forKeyPath:@"currentScore"];
    [super dealloc];
}
-(void)observeValueForKeyPath:(NSString*)keyPath 
                     ofObject:(id)object 
                       change:(NSDictionary*)change 
                      context:(void*)context
{
    if ([keyPath isEqualToString:@"currentScore"]) {
        scoreField.text = [NSString stringWithFormat:
                           @"Score: %d", [object currentScore]];
    } else {
        [super observerValueForKeyPath:keyPath
               ofObject:object
                 change:change
                context:context];
    }
}

答案 2 :(得分:-1)

试试这个:

[self.view setNeedsDisplay];