iOS:调用方法的 UITableViewCell 中的 UITextField

Posted

技术标签:

【中文标题】iOS:调用方法的 UITableViewCell 中的 UITextField【英文标题】:iOS: UITextField in UITableViewCell that calls method 【发布时间】:2016-05-25 23:18:50 【问题描述】:

我需要在UITableViewCell 中使用UITextField。这是使用 Parse 开源,我希望它发回一个标题。所以当它调用cellForRowAtIndexPath 时,它需要做这样的事情。

     - (UITableViewCell *)tableView:(UITableView *)tableView cellForRowAtIndexPath:(NSIndexPath *)indexPath object:(PFObject *)object
    
      static NSString *CellIdentifier = @"Cell";
      UITableViewCell *cell = [tableView dequeueReusableCellWithIdentifier:CellIdentifier forIndexPath:indexPath];
      UITextField *TextField = (UITextField *) [cell viewWithTag:284];

      [TextField setReturnKeyType:UIReturnKeyDone];
      [TextField addTarget:self
                              action:@selector(TitleTextFieldFinished:indexPath:object:)
                    forControlEvents:UIControlEventEditingDidEndOnExit];

      TextField.text = [object objectForKey:@"Toppingname"];

      return cell;

    

那么它可能会这样调用:

- (void)TitleTextField:(UITextField *)TextField:(NSIndexPath *)indexPath:(PFObject *)object


  [TextField resignFirstResponder];
  PFQuery *item = [PFQuery queryWithClassName:@"className"];
  [item getObjectInBackgroundWithId:self.menuid
                              block:^(PFObject *title, NSError *error) 
                                NSString *newTitle = @"New title";
                                title[@"title"] = newTitle;
                                [title saveInBackground];

                              ];

如果有人可以提供帮助,那就太好了!

【问题讨论】:

仅供参考 - 方法和变量名称以小写字母开头是标准做法。类名以大写字母开头。遵循这个标准会让你的代码更容易被其他人阅读。 另外,您应该避免使用匿名参数名称的 Objective-C 方法名称。您建议的文本字段处理程序名为TitleTextField::。这种命名约定加上缺少空格使您的代码很难阅读。 【参考方案1】:

实现如下所示

 - (UITableViewCell *)tableView:(UITableView *)tableView cellForRowAtIndexPath:(NSIndexPath *)indexPath 
    UITableViewCell *cell = [tableView dequeueReusableCellWithIdentifier:@"CellId" forIndexPath:indexPath];

    // Configure the cell...

    UITextField *textField = (UITextField *) [cell viewWithTag:284];

    [textField setReturnKeyType:UIReturnKeyDone];
    [textField addTarget:self
                  action:@selector(titleTextField:inIndexPath:forObject:)
        forControlEvents:UIControlEventEditingDidEndOnExit];

    textField.text = @"Sandeep";

    return cell;



- (void)titleTextField:(UITextField *)textField inIndexPath:(NSIndexPath *)indexPath forObject:(PFObject *)object 

    [textField resignFirstResponder];


但是您不会得到“indexPath”和“object”值,因为 sender(UITextField) 不知道它应该发送哪个 indexPath 和哪个对象。

【讨论】:

不,你不能这样做。 addTarget:action:forControlEvents: 方法只接受带有 0、1 或 2 个参数的选择器,它们不能是任意类型。这可能会崩溃。【参考方案2】:

当您使用addTarget:action:forControlEvents: 方法时,该方法只允许对可能的参数进行非常有限且固定的选项。它必须要么不带参数,1 个参数(控件),要么带 2 个参数(控件和事件)。

您正试图传递两个完全不相关的参数。另外,由于您奇怪的方法命名约定,您的方法名称实际上与您在@selector 中输入的名称不匹配。

您必须根据文本字段确定操作方法中的indexPath,并且您必须使用其他方式(例如实例变量)来访问PFObject

除非你使用 Parse 添加的东西(我不熟悉它),否则cellForRowAtIndexPath 的方法签名是不正确的。它通常没有PFObject 参数。

【讨论】:

以上是关于iOS:调用方法的 UITableViewCell 中的 UITextField的主要内容,如果未能解决你的问题,请参考以下文章

iOS:自定义UITableViewCell的实现需要调用super

在 iOS 中访问自定义 UITableViewCell 中的视图

Uitableviewcell调用uiviewcontroller函数不起作用swift ios

在 iOS 7 中取消 UITableViewCell 滑动删除时收到通知

ios cell的刷新调用哪些方法

iOS UITableViewCell点击时子视图背景透明的解决方法