【问题标题】:UITableViewCell segues to different static UITableViewController based on row selected?UITableViewCell 根据选择的行选择不同的静态 UITableViewController?
【发布时间】:2014-03-12 09:08:36
【问题描述】:

我在 UITableView 中有 3 个单元格。人、汽车和房屋,我希望每个人都将segue 设置为自定义和不同的STATIC TableViewController,以便用户可以进行一些设置。

解决此问题的最有效方法是什么?

prepareForSegue 中查询并调用didSelectRowAtIndexPath 方法然后做什么? 或者在故事板中我是否设置了从一个单元到一个单独的 TVC 的 push segue,3 次?

有谁知道有什么好的教程吗?我不知道该怎么做谢谢。

【问题讨论】:

  • 你可以尝试为每个单元格添加标签,确定哪个单元格被点击了?
  • 有没有更雄辩的解决方案?标记对我来说似乎有点像黑客
  • 你能详细说明一下你想在点击单元格时调用另一个视图控制器吗?
  • 3 个单元格的顺序是否始终相同?因为这样你就可以在didSelectRowAtIndexPath 中检查indexPath.row 并推送到正确的TableViewController
  • 是另一个 UITableViewController

标签: ios storyboard row uitableview uistoryboardsegue


【解决方案1】:

我猜你正在使用故事板?单元格是静态单元格,并且始终保持相同的顺序吗?

如果是这样,我猜你的情节提要中有一个 UIViewController 或 UITableViewController,其中填充了 Person、Car 和 House。

然后,您有 3 个不同的视图控制器,您希望根据选择的 Person、Car 或 House 导航到哪一个?

当您使用原型单元时,我会执行以下操作:

如前所述,在创建单元格时,请执行以下操作:

[cell setTag:indexPath.row];

然后在 didSelectRowAtIndexPath 中执行以下操作:

[tableView deselectRowAtIndexPath:indexPath animated:YES];

UITableViewCell *cell = [tableView cellForRowAtIndexPath:indexPath];

switch ([cell tag]) {
    case 0:
        PersonDetailViewController *personDetailViewController = [[self storyboard] instantiateViewControllerWithIdentifier:@"PersonDetails"];
        [[self navigationController] pushViewController:personDetailViewController animated:YES];
        break;
    case 1:
        // Do similar for Car
        breal;
    case 2:
        // Do similar for House

    default:
        break;
}

【讨论】:

  • 我很难做到这一点,因为它们是原型细胞?
  • 对你所有的问题都同意
  • **注意其他读者我在根控制器中使用动态单元,但它们在技术上是静态的,因为我每次都使用相同的数据数组加载它们
  • 为什么要打标签?只需在didSelectRowAtIndexPath 中使用switch indexPath.row。实际上,最简单的方法是控制从单元格拖动到您想要的视图控制器。
【解决方案2】:

你可以这样做:

在您的 didSelectRowAtIndexPath 方法中,执行以下操作:

if(indexPath.row == 1)
{
   // push to controller 1
}
else if(indexPath.row == 2)
{
   // push to controller 2
}
else if(indexPath.row == 3)
{
   // push to controller 3
}

【讨论】:

  • 而不是 //push to controller 1。您能否将您的代码编辑为实际用途。所以我必须在故事板中设计 3 个自定义静态 TVC,但我如何将它们连接起来并在代码中引用它们?希望这是有道理的,ty
  • 如果您以后甚至不使用标记,为什么还要标记单元格?
【解决方案3】:

首先将您的主 tableview 与三个单独的 TVC 连接,并为每个添加标识符添加 segue

然后在 didSelectRowAtIndexpath 检查哪个 indexpath 被按下并像下面那样调用那个 viewController

-(void)tableView:(UITableView *)tableView didSelectRowAtIndexPath:(NSIndexPath *)indexPath{

if(indexPath.row == 1)
{
   [self performSegueWithIdentifier:@"view1" sender:self];
}
else if(indexPath.row == 2)
{
   [self performSegueWithIdentifier:@"view2" sender:self];
}
else if(indexPath.row == 3)
{
   [self performSegueWithIdentifier:@"view3" sender:self];
}
}

然后在prepareforSegue中找到调用了哪一个视图

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

        TableView1 *tableMenu = segue.destinationViewController;

       }

 else if([[segue identifier] isEqualToString:@"view2"]){

        TableView2 *tableMenu2 = segue.destinationViewController;

       }
 else if([[segue identifier] isEqualToString:@"view3"]){

        TableView3 *tableMenu3 = segue.destinationViewController;

       }
}

如果有任何错误有人纠正我thnx,希望这能奏效

【讨论】:

  • 所以从表格视图控制拖拽 3 次而不是单元格?
  • yap 控制拖动然后添加标识符
猜你喜欢
  • 2014-03-11
  • 1970-01-01
  • 2012-09-10
  • 1970-01-01
  • 1970-01-01
  • 2018-09-07
  • 2011-03-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多