iOS:调用方法的UITableViewCell中的UITextField

时间:2016-05-25 23:18:51

标签: ios objective-c uitableview uitextfield parse-server

我需要在UITextField中使用UITableViewCell。这是使用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];

                              }];
}

如果任何人可以帮助那将是伟大的!

2 个答案:

答案 0 :(得分: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和哪个对象。

答案 1 :(得分:1)

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

您正在尝试传递两个完全不相关的参数。另外,由于您使用了奇怪的方法命名约定,您的方法名称实际上与您在@selector中放置的内容相匹配。

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

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