如何在PrepareForSegue方法中获取自定义单元格的indexPath - iOS

时间:2015-09-17 11:32:01

标签: ios objective-c uitableview segue nsindexpath

我有一个自定义cell,其中包含很少的视图和按钮。从其中一个按钮开始,我执行Segue并且我需要该单元格编号,但不知道如何获取它。请帮忙。

看看我的细胞看起来如何:

enter image description here

从红色圆圈按钮调用prepareForSegue

以下是代码:

- (NSInteger)numberOfSectionsInTableView:(UITableView *)tableView {
    return _array.count;
}

- (NSInteger)tableView:(UITableView *)tableView numberOfRowsInSection:(NSInteger)section {
    return 1;
}

- (UITableViewCell *)tableView:(UITableView *)tableView cellForRowAtIndexPath:(NSIndexPath *)indexPath {

    NewsFeedCell *cell = [tableView dequeueReusableCellWithIdentifier:@"NewsFeedCell" forIndexPath:indexPath];
    if (cell) {
        cell.item = _array[indexPath.section];
    }

    return cell;
}

- (void)prepareForSegue:(UIStoryboardSegue *)segue sender:(id)sender {

    if ([segue.identifier isEqualToString:@"AudioComment"])
    {
      NSIndexPath *indexPath = [self.tableView indexPathForCell:sender];
        NSLog(@"%ld",(long)indexPath.section); //printing 0 everytime :(
    }
}

请提供有关如何获取indexPath的任何帮助/建议?

感谢。

4 个答案:

答案 0 :(得分:2)

您可以使用

UITableViewCell *cell = (UITableViewCell *)[[sender superview]superview];
NSLog(@"%ld",(long)[_generalTableView indexPathForCell:cell].row);

答案 1 :(得分:1)

为索引添加变量,并在选择单元格时进行设置。访问perpareForSegue中的变量,将其传递给destinationVC并将其传递给它。

答案 2 :(得分:1)

使用以下代码。它可能对你有帮助。

- (UITableViewCell *)tableView:(UITableView *)tableView cellForRowAtIndexPath:(NSIndexPath *)indexPath
{
    MainPhotoCell *cell = (MainPhotoCell *)[tableView dequeueReusableCellWithIdentifier:@"CellIdentifierMedia" forIndexPath:indexPath];
    if (!cell)
    {
        cell = [[MainPhotoCell alloc] init];
    }
   cell.usrCommentBtn.tag = indexPath.row;
   [cell.usrCommentBtn addTarget:self action:@selector(onCommentClick:) forControlEvents:UIControlEventTouchUpInside];

    return cell;
}

- (void)onCommentClick:(id)sender
{
   if ([GlobalManager checkUserLoginStatus:self])
   {
        NSIndexPath *indexPath = [NSIndexPath indexPathForRow:([sender tag]) inSection:0];

        [self performSegueWithIdentifier:@"showComments" sender:indexPath];
   }
}

-(void)prepareForSegue:(UIStoryboardSegue *)segue sender:(id)sender
{
    if ([segue.identifier isEqualToString: @"showComments"])
    {
        NSIndexPath * path = (NSIndexPath *)sender;
        //do the your required code here.
    }
}

答案 3 :(得分:1)

您必须在按钮上设置标记。在您的情况下,将按钮标记设置为CellforRowAtIndexPath中的indexPath.section。

- (UITableViewCell *)tableView:(UITableView *)tableView cellForRowAtIndexPath:(NSIndexPath *)indexPath {

    NewsFeedCell *cell = [tableView dequeueReusableCellWithIdentifier:@"NewsFeedCell" forIndexPath:indexPath];
    if (cell) {
        cell.item = _array[indexPath.section];
    }

    cell.button1.tag = indexPath.section;
    return cell;
}

在PrepareForSegue中,从按钮标记中获取索引。

- (void)prepareForSegue:(UIStoryboardSegue *)segue sender:(id)sender {

    if ([segue.identifier isEqualToString:@"AudioComment"])
    {
        NSInteger index = ((UIButton *) sender).tag;
        NSLog(@" %ld ",index);
    }
}