UITextFieldDelegate 不工作

Posted

技术标签:

【中文标题】UITextFieldDelegate 不工作【英文标题】:UITextFieldDelegate is not working 【发布时间】:2014-09-05 17:36:52 【问题描述】:

我是一名 Objective-C 初学者,我做了一个猜谜游戏。游戏会生成一个介于 1 和 10(含)之间的随机整数,用户必须猜出这个数字。然后游戏继续验证猜测是否正确,提示“更高”或“更低”。

游戏运行良好。当使用 UITextField 时,我包含了一个删除键盘的委托。我不知道问题是什么。 我已经查看了如何做到这一点的堆栈溢出,但解决方案似乎都包括我已经拥有的。

//  GGameViewController.h
#import <UIKit/UIKit.h>

@interface GGameViewController : UIViewController<UITextFieldDelegate>



@end

//  GGameViewController.m

#import "GGameViewController.h"

@interface GGameViewController ()
@property (weak, nonatomic) IBOutlet UITextField *inputTxtField;
@property (weak, nonatomic) IBOutlet UILabel *lblHints;
@property int r;
- (IBAction)btnGuess:(id)sender;

@end

@implementation GGameViewController

- (void)viewDidLoad

    [super viewDidLoad];
    // Do any additional setup after loading the view, typically from a nib.
    self.inputTxtField.delegate = self;
    self.r     = (arc4random() % 10) + 1;//Got this from *** at http://***.com/questions/510367/how-do-i-generate-random-numbers-on-the-iphone


- (void)didReceiveMemoryWarning

    [super didReceiveMemoryWarning];
    // Dispose of any resources that can be recreated.


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

- (IBAction)btnGuess:(id)sender 
    int guess = [self.inputTxtField.text intValue];
    NSString *response = @" ";

    if(guess == self.r)
        response = @"You got it!";
        self.inputTxtField.userInteractionEnabled = NO;//Got this from *** at http://***.com/questions/5947965/ios-uitextfield-disabled
        
    else if(guess < self.r)
        response = @"Higher";
    else if(guess > self.r)
        response = @"Lower";

    self.lblHints.text = [[NSString alloc] initWithFormat: @"%@",response];

@end

【问题讨论】:

试试[self.view endEditing:YES]; 而不是[textField resignFirstResponder ]; 一切看起来都不错。顺便说一句...您使用的是什么键盘类型/样式?它有完成/任何返回类型按钮吗?如果您使用的是Number Pad,则默认情况下它不会有返回按钮。 你有没有把inputTextField和IB中对应的UITextField联系起来? @GlennRay:嗨,我试过了,还是不行。 @staticVoidMan:我正在使用带返回按钮的键盘。 【参考方案1】:

如果您从编辑器中复制了这段代码,并且委托回调的签名确实是

- (BOOL) textfieldShouldReturn: (UITextField *)textField

那么您的问题是区分大小写的问题。 textfield 中的 'f' 应大写,如下所示:

- (BOOL) textFieldShouldReturn: (UITextField *)textField

【讨论】:

非常感谢,六弦理论!那解决了它。为什么这是问题? textFieldShouldReturn 不是可以按我想要的任何方式拼写的自定义方法吗? 问题只是大小写。 Objective-C 始终区分大小写,因此textfieldShouldReturntextFieldShouldReturn 不同,后者是为 UITextField 定义的委托方法。很高兴它现在可以工作了!

以上是关于UITextFieldDelegate 不工作的主要内容,如果未能解决你的问题,请参考以下文章

swift 3.0 - UITextFieldDelegate 协议扩展不起作用

我正在寻找 UITextFieldDelegate 示例代码 [关闭]

将 self 分配给 UITextFieldDelegate 在 iOS 8 中而不是在 iOS 7 中工作

UITapGestureRecognizer 不工作

ui文本字段更新SKLabelNode

UIView 的一个类也可以是 UITextFieldDelegate 吗?