【问题标题】:Get row index of custom cell in UITableview获取 UITableview 中自定义单元格的行索引
【发布时间】:2012-11-23 07:28:31
【问题描述】:

我正在开发一个 ipad 应用程序。我在应用程序中有一个 UITableview。 UITableview 以编程方式创建,其中一个标签和 textview 作为其子视图。表格视图中最多可以有五行。一次向用户显示 2 行。在运行时,它需要在 textview 中输入一些文本并将其保存在本地 sqlite db 中。我已经在代码中实现了 textViewDidBeginEditing 和 textViewDidEndEditing 委托。在 textViewDidEndEditing 委托中,我试图在 NSMUtable 数组中添加/替换文本(在 textview 中输入)。为此,我输入文本的文本视图的行索引是必需的。这样我就可以添加/替换数组中的相应行索引。

请告诉我如何获取文本视图的行索引。

【问题讨论】:

    标签: iphone objective-c ipad uitableview ios5


    【解决方案1】:

    您的TextView 将包含在某种单元格中。找到此单元格后,您可以向表格索取索引。从您的TextView 向上导航到视图层次结构以查找单元格。例如:

    TextView* textView = // your textView;
    UITableViewCell* cell = (UITableViewCell*)[textView superview];
    UITableView* table = (UITableView *)[cell superview];
    NSIndexPath* pathOfTheCell = [table indexPathForCell:cell];
    NSInteger rowOfTheCell = [pathOfTheCell row];
    NSLog(@"rowofthecell %d", rowOfTheCell);
    

    【讨论】:

    • 感谢您的回复。这在某些情况下有效,而在其他情况下,它会给出不适当的行索引。就像我从第 0 行导航到第 5 行然后到第 4 行然后到第 0 行一样,在 textviewDidEndediting 中它显示索引 path.row 为 0 而它应该显示 3 这是我编辑的行的索引。
    【解决方案2】:

    它真的很简单,在cellForRowAtIndexPath。只需标记您的textView 喜欢

    cell.txtView.tag = indexPath.row;
    

    在 textView Delegate 方法中使用以下代码 (textViewDidBeginEditing) 查找行

    int row = textView.tag;
    

    【讨论】:

    • 设置此标签后,如果要从 tableView 添加或删除单元格,请小心 - 顺序会改变,标签的值会错误。
    【解决方案3】:

    iOS 8.4 上运行的 Swift 中:

    @IBAction func signInUpBigButtonPressed(sender: SignInUpMenuTableViewControllerBigButton) {
        // We set the self.indexCellContainingButtonClicked with the cell number selected.
        var parentCell: UIView! = sender
        do {
            parentCell = parentCell.superview!
        } while !(parentCell is UITableViewCell)
        let cell = parentCell as! UITableViewCell
        self.indexCellContainingButtonClicked = self.tableView.indexPathForCell(cell)!.row
    }
    

    【讨论】:

      【解决方案4】:

      这是完成您所要求的更优雅的方式

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

      【讨论】:

      • 谢谢!在我看来,这是一个比其他解决方案更好的解决方案。
      【解决方案5】:

      运行 IOS 8.3 发现并在 textViewDidEndEditing 中实现了这一点
      方法;效果很好!

      UIView *parentCell = sender
      while (![parentCell isKindOfClass:[UITableViewCell class]]) {   // iOS 7 onwards the table cell hierachy has changed.
          parentCell = parentCell.superview;
      }
      
      UIView *parentView = parentCell.superview;
      
      while (![parentView isKindOfClass:[UITableView class]]) {   // iOS 7 onwards the table cell hierachy has changed.
          parentView = parentView.superview;
      }
      
      
      UITableView *tableView = (UITableView *)parentView;
      NSIndexPath *indexPath = [tableView indexPathForCell:(UITableViewCell *)parentCell];
      
      NSLog(@"indexPath = %@", indexPath);
      

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2018-01-06
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多