3

我刚刚学习了制作转换应用程序。很好,但我想扩展它。tut 让您输入华氏温度值,然后转换为摄氏温度。很基本。所以我也想添加一个开尔文转换。但是代码只允许你插入一个华氏温度的数字。因此,在添加了 Kelvin 文本字段后,我想查看哪个文本框中有文本。所以我使用了以下代码:

- (IBAction)convert:(id)sender 
{
if ([fahrenheit isFirstResponder]) 
{
    float x = [[fahrenheit text] floatValue];
    float y = (x - 32.0f) * (5.0f/9.0f);  //celcius
    float z = y + 273.15f;  //kelvin
    [celcius setText:[NSString stringWithFormat:@"%3.2f" , y]];
    [kelvin setText:[NSString stringWithFormat:@"%3.2f" , z]];
    [fahrenheit resignFirstResponder];
} else if ([celcius isFirstResponder])
{
    float x = [[celcius text] floatValue];
    float y = 32.0f + ((9.0f/5.0f) * x); //farenheit
    float z = x + 273.12f; //kelvin
    [fahrenheit setText:[NSString stringWithFormat:@"%3.2f" , y]];
    [kelvin setText:[NSString stringWithFormat:@"%3.2f" , z]];
    [celcius resignFirstResponder];
}else if ([kelvin isFirstResponder])
{
    float x = [[kelvin text] floatValue];
    float y = x - 273.15f; //celcius
    float z = 32.0f + ((9.0f/5.0f) * y); //farenheit
    [celcius setText:[NSString stringWithFormat:@"%3.2f" , y]];
    [fahrenheit setText:[NSString stringWithFormat:@"%3.2f" , z]];
    [kelvin resignFirstResponder];
}
}

这使我可以在任何文本字段中输入一个数字,然后进行转换。但后来我决定关闭键盘。我的代码说要resignFirstResponder。但是随后转换操作不起作用,因为现在没有第一响应者。关于如何检查哪个文本框中有文本,然后进行转换的任何线索?提前感谢您的帮助。

4

9 回答 9

8
    if( [textField.text stringByTrimmingCharactersInSet:[NSCharacterSet whitespaceCharacterSet] != nil &&  [textField.text stringByTrimmingCharactersInSet:[NSCharacterSet whitespaceCharacterSet] != @"" )
        {

        // text field has text


// get text without white space

NSString * textWithoutWhiteSpace = [textField.text stringByTrimmingCharactersInSet:[NSCharacterSet whitespaceCharacterSet] ;



        }
于 2012-07-25T12:47:11.817 回答
7

这是用于检查 textView 是否为空:-

if([textView.text isEqualToString:@""])
{
    //textView is Empty
}
else 
{
   //textView has text
}

如果你也想检查它是否有空格,首先从字符串中删除空格然后检查......像这样 -

NSString *trimmedString = [tV.text stringByTrimmingCharactersInSet:
                           [NSCharacterSet whitespaceAndNewlineCharacterSet]];
if([trimmedString isEqualToString:@""])
{
       NSLog(@"textView is empty");
}
else
{
    NSLog(@"textView has some value");
}
于 2012-07-25T12:46:40.227 回答
5

只需使用hasText方法。

例子:

if(_yourTextField.hasText)
{
    // Do something.
}
于 2014-06-24T08:35:32.733 回答
1
if(textView.text.length > 0)
{
   //text present
}
else
{
  //no text
}
于 2012-07-25T12:49:13.520 回答
1

更好的解决方案是即时进行所有转换,向所有文本字段添加新操作

[textField addTarget:self action:@selector(textChanged:) forControlEvents:UIControlEventEditingChanged];

然后在方法 textChanged: 中执行以下操作:

- (void) textChanged:(UITextField *)tf {
    if (tf.text.floatValue > 0) {
        if (tf == fahrenheit) {
            //Do convertion for fahrenheit
        }
        .
        .
        .
        //etc.
    }
}
于 2012-07-25T12:50:35.580 回答
1

回应美诺的回答

不要使用!= @""

这个检查指针相等与字符串相等

采用:

[string isEqualToString:@""];
于 2013-04-05T05:08:09.240 回答
0

如果您想在输入期间知道它,并可能根据此信息执行操作,您应使用:

- (BOOL)textField:(UITextField *)textField shouldChangeCharactersInRange:(NSRange)range replacementString:(NSString *)string
于 2012-12-16T14:18:25.883 回答
0

在其他一些答案中存在一些问题,比如他们没有使用 isEqualToString,并且他们多余地从字符串中删除了我们只对它是否为 nil 感兴趣的潜在字符。

我没有足够的声誉发表评论,所以我将其发布为答案。

对于类似的问题,我用它来检查每个需要检查是否为空的文本字段:

- (BOOL) isEmpty:(UITextField*) field
{
    if (!(field.text) ||
       ([[field.text stringByTrimmingCharactersInSet:[NSCharacterSet whitespaceCharacterSet]] isEqualToString: @""]))
    {
        return YES;
    }
    else
    {
        return NO;
    }
}
于 2014-06-26T14:53:55.840 回答
0

如果您需要NSString删除空格:

NSString *nonWhiteSpaceString = [textfield.text stringByTrimmingCharactersInSet:[NSCharacterSet whitespaceAndNewlineCharacterSet]];

然后您可以将长度用作布尔值:

BOOL textFieldHasText = nonWhiteSpaceString.length;
于 2017-03-28T14:26:56.580 回答