表格细胞争论

时间:2013-11-27 09:46:44

标签: ios objective-c

我有一张桌子。当我点击细胞segue时应该执行。我尝试使用prepareForSegueperformSegueWithIdentifier,但没有任何结果。 我的代码:

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

            if([segue.identifier isEqualToString:@"OpenB"]){

                OpenBViewController *controller = (OpenBViewController *)segue.destinationViewController;
                controller.address = self.selectedCellText;
                [self performSegueWithIdentifier:@"OpenB" sender:self];
            }
    }
        - (void)tableView:(UITableView *)tableView didSelectRowAtIndexPath:(NSIndexPath *)indexPath{

            self.selectedCellText = [[[tableView cellForRowAtIndexPath:indexPath] textLabel] text];
            [self performSegueWithIdentifier:@"OpenB" sender:self];
            [tableView deselectRowAtIndexPath:indexPath animated:YES];
        }

3 个答案:

答案 0 :(得分:0)

首先,您不应在[self performSegueWithIdentifier:@"OpenB" sender:self];方法中调用-prepareForSegue:,因为当要执行segue时会调用-prepareForSegue

其次,检查您是否正确设置了segue。确保您在故事板中为-performSegueWithIdentifier:

使用的故事板中的segue提供了相同的标识符

答案 1 :(得分:0)

您的代码应如下所示:

-(void)prepareForSegue:(UIStoryboardSegue *)segue sender:(id)sender
{
    if([segue.identifier isEqualToString:@"OpenB"]){

        OpenBViewController *controller = (OpenBViewController *)segue.destinationViewController;
        controller.address = self.selectedCellText;
    }
}
- (void)tableView:(UITableView *)tableView didSelectRowAtIndexPath:(NSIndexPath *)indexPath{

    self.selectedCellText = [[[tableView cellForRowAtIndexPath:indexPath] textLabel] text];
    [self performSegueWithIdentifier:@"OpenB" sender:self];
    [tableView deselectRowAtIndexPath:indexPath animated:YES];
}

请注意在故事板中设置标识为OpenB的segue。

答案 2 :(得分:0)

我知道这已经过时了,但只是把它留在这里以防万一发生在别人身上。

此外,所有代码都在Swift 3中,因为我对Objective C语法的了解仅次于nil。

问题很可能是在 推送segue之后didSelectRow()方法被称为 。因此,当调用prepare(ForSegue)时,selectedTextCell变量尚未正确初始化。

如果您通过Interface Builder中创建的segue从单元格连接到下一个ViewController,则不需要使用didSelectRow(),也可能不应该使用,因为segue很可能是总是在didSelectRow()之前推。

在这种情况下,您需要做的就是从prepare()方法中的单元格中检索信息。

签名是:

func prepare(for segue: UIStoryboardSegue, sender: Any?)

发件人是触发segue的对象。在这种情况下,选择的单元格。所以,在prepare()中,你会写这样的东西:

let myCell = sender as! UITableViewCell
controller.address = myCell.textLabel.text

例如,如果您需要访问该行,则为:

controller.idx = self.tableView.indexPath(for: sender as! UITableViewCell)?.row

当然,UITableViewCell可以替换为您可能拥有的任何自定义Cell类。