完成按钮单击时调用 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】:在你的类中实现<UITextFieldDelegate>
协议,设置
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 方法的主要内容,如果未能解决你的问题,请参考以下文章
javascript在启动时调用托管bean的方法,而不是在命令按钮单击时调用它们