【问题标题】:Error in if statement while comparing UITextField's text and a string比较 UITextField 的文本和字符串时 if 语句出错
【发布时间】: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;
    }
}

【问题讨论】:

    标签: ios objective-c iphone xcode xcode6


    【解决方案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 控制器。

      【讨论】:

        猜你喜欢
        • 2016-07-17
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2014-10-09
        • 2018-10-15
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多