比较 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 中逐个字符消失
将 NSString 与 UITextField 文本进行比较永远不会被调用