我在
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
方法
shouldReturn
委托方法就是您正在寻找的:
- (BOOL)textFieldShouldReturn:(UITextField *)textField {
// do something
return YES;
}
有两种方法可以做到这一点
1.) 您可以执行 UIControlEventEditingDidEndOnExit 事件。
2.) 或者您也可以在文本字段 retun 中实现您的方法
<UITextfieldDelegate> //in yourController.h file
//yourController.m
- (BOOL)textFieldShouldReturn:(UITextField *)textField
{
//do your code here.
return YES;
}
这两种方法都可以帮助您解决问题。
你可以检查UItextfield的shouldreturn方法调用
- (BOOL)textFieldShouldReturn:(UITextField *)textField {
NSLog( @"text changed: %@",textField.text);
[self ProdcutDirectSetToCartAPICall];
return YES;
}
在课堂上实施
<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;
}
我检查了下面的代码,它工作正常
在 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;
}
我认为每次更改
forControlEvents:UIControlEventEditingChanged
中的某些内容时都会调用 UITextField
。如果您想在用户单击键盘上的 'Done'
按钮时调用该方法,请尝试更改行
[cell.ProductQuantityTextField addTarget:self action:@selector(editingChanged:)forControlEvents:UIControlEventEditingChanged];
与
[cell.ProductQuantityTextField addTarget:self action:@selector(editingChanged:)UIControlEventEditingDidEnd];
现在真的这么简单,幸运的是
addAction({
UIAction { [weak self] _ in
print("that worked!")
self?.field.resignFirstResponder()
}
}(), for: .editingDidEndOnExit)
是
editingDidEndOnExit
,不是editingDidEnd