1

我正在制作一个 iOS 计算器,我在使用退格按钮时遇到了一些小问题(用于删除标签上显示的值的最后一个数字)。

要获取我使用的标签上的当前值

    double currentValue = [screenLabel.text doubleValue]

在其他问题之后,我尝试了类似

-(IBAction)backspacePressed:(id)sender
{
NSMutableString *string = (NSMutableString*)[screenLabel.text];

int length = [string length];

NSString *temp = [string substringToIndex:length-1]
;

[screenLabel.text setText:[NSString stringWithFormat:@"%@",temp]];

}

但它不起作用,

(Xcode 说“不推荐使用 setText ”,“ NSString 可能不会响应 setText ”,并且IBAction 内的第一行代码中需要一个标识符)

而且我并不真正理解这段代码以使其自己工作。

我该怎么办?

4

1 回答 1

3

它应该是

[screenLabel setText:[NSString stringWithFormat:@"%@",temp]];

您的 Xcode 清楚地表明您正在尝试调用setText' method on anNSString where as you should be calling that on aUILabel . YourscreenLabel.text is retuning anNSString . You should just usescreenLabel alone and should callsetText`。

只需使用,

NSString *string = [screenLabel text];

问题在于,您使用[screenLabel.text];which is not correct as per objective-c syntax to call textmethod on screenLabel. 要么你应该使用,

NSString *string = [screenLabel text];

或者

NSString *string = screenLabel.text;

在这种方法中,我认为您不需要使用NSMutableString. 你可以NSString改用。

简而言之,您的方法可以写成,

-(IBAction)backspacePressed:(id)sender
{
   NSString *string = [screenLabel text];
   int length = [string length];
   NSString *temp = [string substringToIndex:length-1];
   [screenLabel setText:temp];
}

根据您在评论中的问题(现在已删除),如果您想在没有字符串时显示零,请尝试,

-(IBAction)backspacePressed:(id)sender
{
   NSString *string = [screenLabel text];
   int length = [string length];
   NSString *temp = [string substringToIndex:length-1];

   if ([temp length] == 0) {
     temp = @"0";
   }
   [screenLabel setText:temp];
}
于 2012-11-26T18:17:16.853 回答