如何让Table Cell执行两个不同的segue但有条件?

时间:2015-01-11 10:43:16

标签: ios objective-c

我是iOS开发的新手,请原谅我提出愚蠢的问题或执行愚蠢的行为。

所以现在,这就是问题所在。我正在开发一个应用程序,我有一个标签栏控制器作为初始,称为[初始标签视图]。其中一个选项卡是显示所有项目的表格视图,我们可以调用此[项目视图]。一旦用户点击单元格,它将推送到另一个视图并显示详细信息,[详细信息视图]。另一个选项卡也是一个表格视图,但有静态单元格,[静态视图],我用它来选择一个项目并返回。

更清晰的图片:如果我从初始标签视图访问[项目视图],只需按照[初始标签视图] - > [项目视图] - > [详细视图]。但是,如果我首先访问[静态视图]然后转到[项目视图],则程序将类似于[初始选项卡视图] - > [静态视图] - > [项目视图] - > [静态视图]。

我不知道如何在[项目视图]中实现第二个(使用[静态视图]),有人可以帮忙吗?还是有另一种更好的方法?非常感谢。

// Code from [Item View]

- (UITableViewCell *)tableView:(UITableView *)tableView cellForRowAtIndexPath:(NSIndexPath *)indexPath {
static NSString *identifier = @"CustomShopCell";
ShopCustomTableCell *cell = [tableView dequeueReusableCellWithIdentifier:identifier];
if (cell == nil) {
    cell = [[ShopCustomTableCell alloc] initWithStyle:UITableViewCellStyleSubtitle
                                      reuseIdentifier:identifier];
}

if (searchResult != nil) {
    //cell.textLabel.text = [searchResult objectAtIndex:indexPath.row];
    Shop *shop = searchResult[indexPath.row];
    if ([shop.shopNameChi length] == 0) {
        cell.lblName.text = shop.shopName;
    } else {
        cell.lblName.text = [NSString stringWithFormat:@"%@ | %@", shop.shopName, shop.shopNameChi];
    }
    cell.lblLocation.text = shop.unit;
    cell.imgImage.contentMode = UIViewContentModeScaleAspectFit;
    cell.imgImage.image = [UIImage imageWithData:shop.imageData];

} else {
    //cell.textLabel.text = [list objectAtIndex:indexPath.row];
    Shop *shop = shopList[indexPath.row];
    if ([shop.shopNameChi length] == 0) {
        cell.lblName.text = shop.shopName;
    } else {
        cell.lblName.text = [NSString stringWithFormat:@"%@ | %@", shop.shopName, shop.shopNameChi];
    }
    cell.lblLocation.text = shop.unit;
    cell.imgImage.contentMode = UIViewContentModeScaleAspectFit;
    cell.imgImage.image = [UIImage imageWithData:shop.imageData];

}

return cell;
}

- (void)tableView:(UITableView *)tableView didSelectRowAtIndexPath:(NSIndexPath *)indexPath {
    if(![self isKindOfClass:[NavigationMainTableViewController class]]){
        [self performSegueWithIdentifier:@"showShopDetail" sender:self];
    }
    [tableView deselectRowAtIndexPath:indexPath animated:YES];
}

3 个答案:

答案 0 :(得分:0)

尝试使用这个。您可以为录制的每个单元格设置该方法。

   [self performSegueWithIdentifier:@"yourIdentifierHere" sender:self];

答案 1 :(得分:0)

你能做什么(如果我确定我理解你在做什么)是创建两个带有不同标识符的segue链接(名称清晰,我喜欢这种格式“fromHereToThere”)。然后在你的didselect中你可以用if语句调用你的segue,如下所示:

if (your condition){

 [self performSegueWithIdentifier:@"fromHomeToStatic" sender:self];

}else{

 [self performSegueWithIdentifier:@"fromHomeToDetail" sender:self];

}

然后在prepareForSegue方法(默认情况下在每个控制器类中的注释)中,您可以选择要传递的数据,

if ([segue.identifier isEqualToString:@"fromHomeToDetail"])
{
  //Manage your usual stuff here for the detail identifier
  //Ask me again if you need extra help with that
}

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

 //Manage here for the static identifier
}

但我并不完全确定你对你的问题意味着什么,所以我可能完全偏离主题:D

编辑:好的,显然你想知道你在装载第三个控制器时从哪里来。所以这是一种方法。

在目标控制器中,将其添加到.h

@property (nonatomic) BOOL fromStatic; 

(或任何你想要的)

然后在您的原始控制器的prepareForSegue中,如果您来自静态,请将下一个控制器的BOOL设置为YES,否则,将其设置为{ {1}},像这样

NO

在目的地控制器的viewDidLoad中,只检查它是否为“是”,并做出相应的反应。

我说得对,还是我仍然对你的问题感到困惑?我仍然没有完全确定你在问什么哈哈:D

答案 2 :(得分:0)

如果您使用的是静态细胞原型。只需从单元格拖动到要推动的视图,然后选择push in segue。如果您使用的是动态UITableViewCell。您可以在didSelectRowAtIndex方法中执行Segue。