按下它时为 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?