完成按钮单击时调用 UITextField 方法

Posted

技术标签:

【中文标题】完成按钮单击时调用 UITextField 方法【英文标题】:UITextField method call when done button click 【发布时间】:2017-03-17 09:23:15 【问题描述】:

我在UITableViewCell 中有一个文本字段

当我直接点击文本字段时,会调用此方法:

-(void)editingChanged:(UITextField *)sender

这是我在cellForRowAtIndexPath中的代码

[cell.ProductQuantityTextField addTarget:self action:@selector(editingChanged:)forControlEvents:UIControlEventEditingChanged];


-(void) editingChanged:(UITextField *)sender

    NSLog( @"text changed: %@",cell.ProductQuantityTextField.text);
    [self ProdcutDirectSetToCartAPICall];

我想要这样,当我单击文本字段时,我会更改文本字段的值,然后单击键盘的完成按钮,那时我想调用 UITextField 方法

【问题讨论】:

How to call a method when the Done Button in the KeyBoard is Clicked?的可能重复 感谢它非常有用.. @Odedra 你的问题解决了吗? 是的,它已解决,但 UITextField 委托方法在它调用后第一次没有被调用。 【参考方案1】:

shouldReturn 委托方法是您正在寻找的:

- (BOOL)textFieldShouldReturn:(UITextField *)textField 
    // do something
    return YES;

【讨论】:

感谢我已经使用了这种方法,但我无法从 cell.ProductQuantityTextField.text 获得价值! 您将文本字段作为参数。所以尝试在委托方法中使用NSLog(@"%@", textField.text) 来获取文本。【参考方案2】:

有两种方法可以做到这一点

1.) 您可以执行 UIControlEventEditingDidEndOnExit 事件。

2.) 或者您也可以在文本字段 retun 中实现您的方法

<UITextfieldDelegate> //in yourController.h file

//yourController.m
- (BOOL)textFieldShouldReturn:(UITextField *)textField 
 

 //do your code here.     

return YES;

这两种方法都可以帮助您解决问题。

【讨论】:

【参考方案3】:

可以查看UItextfield的shouldreturn方法调用

- (BOOL)textFieldShouldReturn:(UITextField *)textField 
    NSLog( @"text changed: %@",textField.text);
    [self ProdcutDirectSetToCartAPICall];
    return YES;

【讨论】:

【参考方案4】:

在你的类中实现&lt;UITextFieldDelegate&gt; 协议,设置

ProductQuantityTextField.delegate = self;

并使用

- (void)textFieldDidEndEditing:(UITextField *)textField 
   [textField resignFirstResponder];
    NSLog(@"Textfield text %@", textField.text);
   [self ProdcutDirectSetToCartAPICall];

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

【讨论】:

【参考方案5】:

我检查了下面的代码,它工作正常

在 cellForRowAtIndexPath 中我添加了下面的代码

 cell.ProductQuantityTextField.delegate = self;

 cell.ProductQuantityTextField.tag = indexPath.row; //If you want you can give tag here

 [cell.ProductQuantityTextField addTarget:self action:@selector(editingChanged:) forControlEvents:UIControlEventEditingChanged];


-(void)editingChanged:(UITextField *)field


    NSLog( @"text changed: %@",field.text);


- (BOOL)textFieldShouldReturn:(UITextField *)textField 


    NSLog( @"textFieldShouldReturn: %@",textField.text);

   [textField resignFirstResponder];

   //If you need cell
    TableViewCellName *cell = (TableViewCellName*) [[textField superview]superview];

    NSLog( @"text changed: %@",cell.ProductQuantityTextField.text);

   [self ProdcutDirectSetToCartAPICall];

   return YES;

【讨论】:

ProductQuantityTextField cell = (ProductQuantityTextField) [[textField superview] superview];此错误:使用未声明的标识符 'ProductQuantityTextField 对不起,你可以作为uitableview单元格类型【参考方案6】:

我认为每次更改UITextField 中的某些内容时都会调用forControlEvents:UIControlEventEditingChanged。如果您想在用户单击键盘上的'Done' 按钮时调用该方法,请尝试更改行

[cell.ProductQuantityTextField addTarget:self action:@selector(editingChanged:)forControlEvents:UIControlEventEditingChanged];

[cell.ProductQuantityTextField addTarget:self action:@selector(editingChanged:)UIControlEventEditingDidEnd];

【讨论】:

以上是关于完成按钮单击时调用 UITextField 方法的主要内容,如果未能解决你的问题,请参考以下文章

在按下完成或uitextfield的返回键时调用函数

在导航控制器中单击后退按钮时调用哪个方法?

从“视图”单击按钮时调用“控制器”方法

javascript在启动时调用托管bean的方法,而不是在命令按钮单击时调用它们

Bootstrap Modal,在按钮单击时调用 Action Result 方法

如何使用Angular 5在单击按钮时调用多个方法?