UITableView Cell IndexPath

时间:2010-03-30 19:23:43

标签: iphone objective-c uitableview nsindexpath

任何人都可以告诉我如何获得一个单元格IndexPath? 我在tableView:cellForRowAtIndexPath:方法中保存了IndexPath,但这仅在查看单元格时加载,我需要知道viewDidLoad方法的索引路径。这导致了一个空值,因为正如我所说,它只在一次查看单元格后才加载它的值。

谢谢。

修改

目的是能够跳转到具有特定数字的特定单元格,但它与部分和行数不是线性的。

4 个答案:

答案 0 :(得分:18)

在tableView上使用方法indexPathForCell:,给定指向UITableViewCell的指针,它返回其indexPath。

如果scrollToRowAtIndexPath:atScrollPosition:animated:中尚未设置viewWillAppear,则可以将viewDidLoad置于{{1}}方法中。如果视图在加载后可以出现多次,例如当它调用的模态视图控制器停止时,这是一个更好的地方。

答案 1 :(得分:2)

UITableViewCell没有NSIndexPath属性。 UITableViewDataSource委托定义了为给定NSIndexPath请求单元格的方法,但这并不意味着单元格与NSIndexPath属性有任何持久的关系。

如果您解释了更多您想要这个属性的内容,也许会有所帮助?您想对viewDidLoad中的单元格位置做什么?

答案 2 :(得分:1)

试试这个..

    NSSet *touches = [event allTouches];
UITouch *touch = [touches anyObject];
CGPoint currentTouchPosition = [touch locationInView:EventlistTable_obj];
NSIndexPath *indexPath = [EventlistTable_obj indexPathForRowAtPoint: currentTouchPosition];
 NSLog(@"Selected  row:%d in section:%d",indexPath.row,indexPath.section);

这样打电话:

[cell.fourth_image_button addTarget:self action:@selector(Btn_pressed:event:) forControlEvents:UIControlEventTouchUpInside];

答案 3 :(得分:0)

对我来说,就像你回答了自己的问题:你做不到。因为执行viewDidLoad时单元格没有indexPath。事实上,它之后也没有,因为如果你使用单元格出列(好词!),那么同样的单元格可以在十分之一秒内被重用于另一个索引。

编辑:好的,我想我看到了你想要的东西:当你将单元格传递给tableView时,你正在自己保存indexPath。注意:如果你不这样做,你就无法真正知道特定单元格放置在哪个indexPath上,至少在你按照自己应该的方式做事时是这样。

所以你可以做的只是在viewDidLoad方法中创建所有单元格,将它们存储在一个数组中,然后,当表视图请求它们时,只需将它们从该数组中移除即可。

请注意,这不是填充表视图的好方法,因为它会阻止单元格被重用。更好的方法是在数组中保存单元格(纯UIViews)的内容,并在返回单元格之前将它们作为子项添加到单元格的内容视图中。这将允许细胞再利用,这对于良好的性能是至关重要的。如果屏幕上没有更多的单元格,则不必担心重复使用它们。