为计算器制作退格按钮

时间:2012-11-26 18:12:16

标签: objective-c ios xcode calculator

我正在制作一个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内部的代码行)

我并不真正理解这段代码让它自己运作。

我该怎么办?

1 个答案:

答案 0 :(得分:3)

应该是

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

您的Xcode明确表示您正在尝试拨打setText' method on an NSString where as you should be calling that on a UILabel . Your screenLabel.text is retuning an NSString . You should just use screenLabel alone and should call setText`就在那。

只需使用,

NSString *string = [screenLabel text];

问题在于,您使用的[screenLabel.text];根据objective-c语法不正确,无法在text上调用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];
}