当didEndOnExit调用自定义方法时,如何从单元格中的textField获取indexPath

时间:2014-04-10 18:24:32

标签: ios uitableview nsindexpath tableviewcell

这是我的第一个问题。我不会问,但在阅读文档并尝试从堆栈溢出的大量代码后,我仍然难倒。我刚刚开始学习代码,所以是的,我是一个笨蛋,如果我做了一些基本的错误就不会感到惊讶。

我正在尝试做的事情:在自定义单元格的textField中输入一个数字,在退出时,在CustomCellClass.m中调用saveGoal方法(代码如下所示)。 saveGoal方法从先前条目的文本文件创建targetsArray(如果没有数据创建文本文件。我省略了该代码,因为它有效)。这是困难的(对我来说)。我需要调用方法的单元格的indexPath,所以我可以插入用户条目......但我不知道如何将单元格对象用作indexPathForCell中的参数。

   - (IBAction)saveGoal:(id)sender {

    // Saving the user entry in a string
    self.goalString = [NSString stringWithFormat:@"%@\n",self.goal.text];

    // Instance variables
    NSError *err = nil;
    NSMutableArray *goalsArray = [NSMutableArray arrayWithContentsOfURL:self.goalsURLMethod];

    // If there is data in the text file
    NSIndexPath *indexPath = [[NSIndexPath alloc] init];

            // Ideally I'd like to do something like this (There is an IBOutlet from the 
            // table view in the storyboard to a tableView property).
            indexPath = [self.tableView indexPathForCell: UNKNOWN CELL PARAMETER]; 

            // Then based on the indexPath I can insert or replace objects in the array
            if(indexPath == 0) {
            // masterful code
            } else {
            // If it's another row, replace the object. Something like this:
            [goalsArray replaceObjectAtIndex: indexPath.row withObject: self.goalString];
            [goalsArray writeToURL:self.goalsURLMethod atomically:YES];

            // Then update the view 
            [self.tableView reloadData];
            }
        }
}

非常感谢解决方案!

2 个答案:

答案 0 :(得分:1)

如果您有自定义单元格,请为其添加属性:

@property (strong, nonatomic) NSIndexPath *indexPath;

并在返回要显示的单元格时设置它。现在,单元格可以访问所需的信息。

除了:

不是说你将再使用它,但不要这样做:

NSIndexPath *indexPath = [[NSIndexPath alloc] init];
indexPath = [self.tableView indexPathForCell: UNKNOWN CELL PARAMETER];

因为创建一个实例只是为了在下一个语句中销毁它是浪费

答案 1 :(得分:0)

或者您可以像这样进入您选择的动作方法:

CGPoint hitPoint = [sender convertPoint:CGPointZero toView:self.tableView]; 
NSIndexPath *hitIndex = [self.tableView indexPathForRowAtPoint:hitPoint];