按下它时为 UITextfield 设置操作

Posted

技术标签:

【中文标题】按下它时为 UITextfield 设置操作【英文标题】:Put Action for UITextfield when pressing on it 【发布时间】:2013-12-08 11:05:50 【问题描述】:

我有一个文本字段,我想在按下时对其进行操作。

我尝试了两件事: 1) 在 TouchUpInside 时给它动作。

[_countryTF addTarget:self action:@selector(testing:) forControlEvents:UIControlEventTouchUpInside];

-(IBAction)testing:(id)sender

    NSLog(@"testing");

但未调用测试操作。

2) 我试图用这样的通知来处理它

    [[NSNotificationCenter defaultCenter] addObserver:self
                                         selector:@selector(keyboardWillHideHandler:)
                                             name:UIKeyboardWillShowNotification
                                           object:nil];

- (void) keyboardWillHideHandler:(NSNotification *)notification 
    //show another viewcontroller here
    NSLog(@"%@",notification.userInfo);


但是我没有得到关于谁触发了通知的任何信息,所以我可以为我的特定 UITextField 而不是任何其他 UITextField 执行我的操作。

有什么想法吗?

【问题讨论】:

标记您的 UI 文本字段,检查哪个文本字段是第一响应者 【参考方案1】:

您应该使用 UIGestueRecognizer。 textFieldDidBeginEditing: 方法只会在您第一次按下文本字段时起作用。将点击手势识别器添加到您的文本字段:

    UITapGestureRecognizer *tapRecognizer = [[UITapGestureRecognizer alloc] initWithTarget:self action:@selector(testing:)];
    [tapRecognizer setNumberOfTapsRequired:1];
    [textField addGestureRecognizer:tapRecognizer];

现在您需要手动处理显示键盘。将此代码添加到您的测试中:方法:

-(IBAction)testing:(id)sender

    UITapGestureRecognizer *gr = (UITapGestureRecognizer*)sender;
    UITextField *tf = (UITextField*)[gr view];
    [tf becomeFirstResponder];
    NSLog(@"testing");

【讨论】:

【参考方案2】:

使用UITextField Delegate methods。将文本字段的委托设置为视图控制器类并实现此方法

- (void)textFieldDidBeginEditing:(UITextField *)textField // Tells the delegate that editing began for the specified text field.

【讨论】:

只有当您首次按下文本字段时,此答案才会起作用。【参考方案3】:

你也可以试试:

[[NSNotificationCenter defaultCenter] addObserver:self
                                         selector:@selector(keyboardWillHideHandler:)
                                             name:UIKeyboardWillShowNotification
                                           object:myTextField];

并通过以下方式访问通知中的文本字段:

- (void) keyboardWillHideHandler:(NSNotification *)notification 
    UITextField *textField = notification.object;

这只会处理第一次点击。突出显示 textField 并显示键盘后,将不会注册以下触摸。如果您只是想对触摸做出初步反应,这是一个选择。否则,您可能应该像 Greg 解释的那样使用 UITapGestureRecognizer。

【讨论】:

以上是关于按下它时为 UITextfield 设置操作的主要内容,如果未能解决你的问题,请参考以下文章

在 Swift 中,如何使动态 tableView 单元格可选,以便在按下它时转移到不同的 tableViewController?

UITextView 无意中添加了新行?

android 12 onBackPressed

表格视图中叠加的文本字段

设置新图像后调整 UIButton 的大小

UITextField - 检测内置 iPhone 键盘上的输入?