【问题标题】:UITextField method call when done button click完成按钮单击时调用 UITextField 方法
【发布时间】: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 方法

【问题讨论】:

标签: ios objective-c uitableview 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];
        

        【讨论】:

          猜你喜欢
          • 1970-01-01
          • 2011-02-08
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          相关资源
          最近更新 更多