比较 UITextField 的文本和字符串时 if 语句出错

Posted

技术标签:

【中文标题】比较 UITextField 的文本和字符串时 if 语句出错【英文标题】:Error in if statement while comparing UITextField's text and a string 【发布时间】:2015-05-27 10:46:42 【问题描述】:

在我的应用程序中,我有一个视图控制器,它有一个搜索栏,顶部是 UItextfield,下方是 UIImageview。图像视图最初是隐藏的。

我希望通过 if 语句取消隐藏此图像视图。用户将在文本字段中输入关键字,当某个单词与.m文件中的预定义字符串匹配时,它必须显示图像。

我最初有两个视图控制器,但现在我添加了另一个(第三个视图控制器)。当我在文本字段中输入一个单词时,模拟器将引导我回到这一行以绿色突出显示的代码:

 if ([string1 isEqualToString:string2])  

     locationMap.hidden = YES;

这是.h文件:

@interface ThirdViewController : UIViewController

    IBOutlet UITextField *searchLocation;
    IBOutlet UIImageView *locationMap;

-(IBAction)SearchGo;
@end

这是 .m 文件:

-(IBAction)SearchGo

    NSString *string1 = searchLocation.text;
    NSString *string2= @"sydney";
    if ([string1 isEqualToString:string2]) 
        locationMap.hidden = YES;
    

【问题讨论】:

【参考方案1】:

听起来你不小心设置了一个断点。只需单击断点所在行左侧的蓝色箭头即可删除断点。

【讨论】:

好的,这可能是由于错误设置断点的原因,当我删除断点时它什么也不做......我的图像应该出现但它没有:( 您是否正确连接了IBOutlet? 当搜索字段为 sydney 时,您正在隐藏图像。您的意思是取消隐藏它吗? 是的,我已经正确连接了 IBOutlet。当搜索字段为 sydney 时,我想取消隐藏图像 然后使用locationMap.hidden = NO;【参考方案2】:

viewDidLoad 方法中,使用:

locationMap.hidden = YES;

在您的 -(IBAction)SearchGo 方法中,使用:

locationMap.hidden = NO;

或者你的searchGo 方法:

-(IBAction)SearchGo

    if ([searchLocation.text isEqualToString:@"sydney"]) 
        locationMap.hidden = NO;
    else 
       //implementation
    

【讨论】:

【参考方案3】:

我猜,您已将 IBAction 与您的文本字段、searchLocation 一起附加并触发了指定“Touch up Inside”的操作。由于几个原因,这将不起作用。

首先,您需要实现 textFieldShouldReturn: 委托方法,以便您的控制器知道当您按下回车键时,它应该从您的文本字段中交出控制权。再说一次,您已将您的操作方法附加到您的文本字段,一旦您点击文本字段,它就会转到您的方法并开始比较,但此时,您在文本字段中没有输入任何内容并且它不符合你的 if 条件。

解决方案是使用按钮并将操作方法​​附加到该按钮。这样,在你输入“sydney”这个词之后,你就按下了按钮。它将在您的文本字段中获取任何内容并与之进行比较。

这里是解决方案-

查看名为“Go”的额外按钮。附上你的方法。

这是我的 .h 文件-

#import <UIKit/UIKit.h>

@interface ViewController : UIViewController<UITextFieldDelegate>

@property(nonatomic, strong)   IBOutlet UITextField *searchLocation;
@property(nonatomic, strong)   IBOutlet UIImageView *locationMap;

-(IBAction)SearchGo:(id)sender;

@end

这是.m文件-

#import "ViewController.h"

@interface ViewController ()

@property(nonatomic, strong) NSString *string1;

@end

@implementation ViewController

- (void)viewDidLoad 
    [super viewDidLoad];


- (void)didReceiveMemoryWarning 
    [super didReceiveMemoryWarning];



#pragma mark- textfield delegate

- (void)textFieldDidEndEditing:(UITextField *)textField
    self.string1 = textField.text;

- (BOOL)textFieldShouldReturn:(UITextField *)textField
    [textField resignFirstResponder];
    return YES;


-(IBAction)SearchGo:(id)sender
    NSString *string2= @"Sydney";
    if ([self.string1 isEqualToString:string2]) 
        self.locationMap.hidden = NO;
    


@end

通过委托方法完成编辑后,保存文本字段中的字符串。确保将 UITextFieldDelegate 附加到 ViewController。

或者,您可能希望避免所有这些麻烦并使用 UISearchDisplay 控制器。

【讨论】:

以上是关于比较 UITextField 的文本和字符串时 if 语句出错的主要内容,如果未能解决你的问题,请参考以下文章

什么是在输入 UITextField 时获取整个文本的简单方法?

UITextField 在编辑时剪切文本

如何实现占位符文本在 UITextField 中逐个字符消失

将 NSString 与 UITextField 文本进行比较永远不会被调用

UITextField 的安全文本输入和自动更正之间的交互是啥?

UITextField:密码实现