我正在制作一个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内部的代码行)
我并不真正理解这段代码让它自己运作。
我该怎么办?
答案 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];
}