iOS Segue 打开两个 View Controller (假设单击了两个表格单元格)

标签 ios uitableview segue viewcontroller

当我在我的应用程序中单击一个表格单元格时,它会打开两个 View Controller 。它似乎假设我点击了两个单元格,因为它打开了之前的单元格和我点击过的单元格。

前 3 个单元格几乎是静态的,“成分”标题下的所有其他单元格都是动态的。因此为什么 indexPath - 3

我在界面生成器中创建了 TableView 和 View Controller 之间的连接。

表格 View :

enter image description here

第一个 View Controller /segue:

enter image description here

第二个 View Controller 转场:

enter image description here

转场代码:

- (void)tableView:(UITableView *)tableView didSelectRowAtIndexPath:(NSIndexPath *)indexPath
{
    self.selectedIngredient =  self.selectedProduct.ingredientsArray[indexPath.row - 3];
    [self performSegueWithIdentifier:@"ingViewSegue" sender:self];
    NSLog(@"selected ingredient %@", self.selectedIngredient);
 }

  #pragma mark segue

 - (void)prepareForSegue:(UIStoryboardSegue *)segue sender:(id)sender {
     IngredientWebViewController *webView = segue.destinationViewController;
     webView.selectedIngredient = self.selectedIngredient;
 }

表中的行数:

#pragma mark - Table view data source
- (NSInteger)numberOfSectionsInTableView:(UITableView *)tableView
{
       return 1;
}

- (NSInteger)tableView:(UITableView *)tableView numberOfRowsInSection:(NSInteger)section {

   return [_selectedProduct.ingredientsArray count] + 3;
}

填充表格的代码:

- (UITableViewCell *)tableView:(UITableView *)tableView cellForRowAtIndexPath:(NSIndexPath *)indexPath
{
    if(indexPath.row == 0)
    {
        TitleCell* titleCell = (TitleCell*)[self.tableView dequeueReusableCellWithIdentifier:@"TitleCell" forIndexPath:indexPath];
        titleCell.nameLabel.text = self.selectedProduct.productName;
        titleCell.brandLabel.text = self.selectedProduct.productBrand;
        return titleCell;
    }
    else if(indexPath.row == 1)
    {
        return [self.tableView dequeueReusableCellWithIdentifier:@"RatingCell" forIndexPath:indexPath];

    }
    else if(indexPath.row == 2)
    {
        return [self.tableView dequeueReusableCellWithIdentifier:@"IngredientHeaderCell" forIndexPath:indexPath];
    }
    else
    {
        IngredientsCell* ingCell = (IngredientsCell*)[self.tableView dequeueReusableCellWithIdentifier:@"IngredientCell" forIndexPath:indexPath];

        ingCell.ingredientNameLabel.text =     self.selectedProduct.ingredientsArray[indexPath.row - 3];

        if([self.selectedProduct.ratingsArray[indexPath.row -3]  isEqual: @"4"])
        {
            ingCell.ingredientsImage.image = [UIImage imageNamed:@"icon_safe.png"];
        }
        else if([self.selectedProduct.ratingsArray[indexPath.row -3]  isEqual: @"3"])
        {
            ingCell.ingredientsImage.image = [UIImage imageNamed:@"icon_low.png"];
        }
        else if([self.selectedProduct.ratingsArray[indexPath.row -3]  isEqual: @"2"])
        {
            ingCell.ingredientsImage.image = [UIImage imageNamed:@"icon_med.png"];
        }
        else if([self.selectedProduct.ratingsArray[indexPath.row -3]  isEqual: @"1"])
        {
            ingCell.ingredientsImage.image = [UIImage imageNamed:@"icon_high.png"];
        }
        else
        {
            ingCell.ingredientsImage.image = [UIImage imageNamed:@"icon_safe.png"];
        }

        return ingCell;
    }
}

改变单元格高度的代码:

-(CGFloat)tableView:(UITableView *)tableView heightForRowAtIndexPath:(NSIndexPath *)indexPath
{
    if(indexPath.row == 0)
    {
       UITableViewCell* cell = [self.tableView dequeueReusableCellWithIdentifier:@"TitleCell"];
       CGSize size = [cell.contentView systemLayoutSizeFittingSize:UILayoutFittingCompressedSize];
       return size.height + 1;
   }
   else if(indexPath.row == 1)
   {
       UITableViewCell* cell = [self.tableView dequeueReusableCellWithIdentifier:@"RatingCell"];
       CGSize size = [cell.contentView systemLayoutSizeFittingSize:UILayoutFittingCompressedSize];
       return 118;
   }
   else if(indexPath.row == 2)
   {
       UITableViewCell* cell = [self.tableView dequeueReusableCellWithIdentifier:@"IngredientHeaderCell"];
       CGSize size = [cell.contentView systemLayoutSizeFittingSize:UILayoutFittingCompressedSize];
       return size.height + 1;
   }
   else
   {
       UITableViewCell* cell = [self.tableView dequeueReusableCellWithIdentifier:@"IngredientCell"];
       CGSize size = [cell.contentView systemLayoutSizeFittingSize:UILayoutFittingCompressedSize];
       return 60;
   }
 }

最佳答案

点击单元格时将自动执行转场。试试下面的代码:

// - (void)tableView:(UITableView *)tableView didSelectRowAtIndexPath:(NSIndexPath *)indexPath
// {
//     self.selectedIngredient =  self.selectedProduct.ingredientsArray[indexPath.row - 3];
//     [self performSegueWithIdentifier:@"ingViewSegue" sender:self];
//     NSLog(@"selected ingredient %@", self.selectedIngredient);
//  }

  #pragma mark segue

 - (void)prepareForSegue:(UIStoryboardSegue *)segue sender:(id)sender {
     NSIndexPath *indexPath = [self.tableView indexPathForCell:sender]; 

     IngredientWebViewController *webView = segue.destinationViewController;
     webView.selectedIngredient = self.selectedProduct.ingredientsArray[indexPath.row - 3];
 }

关于iOS Segue 打开两个 View Controller (假设单击了两个表格单元格),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/30796282/

相关文章:

objective-c - 用 pushViewController 替换 Storyboard Segue 会导致奇怪的行为

objective-c - 使用图像创建自定义动画 segue?

XCode 组件中未列出 iOS 11.2.2 模拟器

ios - 滚动时如何停止在 UICollectionViewCell 内的 YTPlayerView 中播放视频?

ios - 如何使 iOS 7 中 UISearchBar 顶部的区域(在 UITableView 上时)透明?

ios - 如何在 ios 中动态更改 uitableview 的特定标题部分高度

ios - 无法从维基百科 API 恢复图像并将其显示在另一个 View Controller 中

ios - 仅更改默认 UILabels 的 UIAppearance

iPhone cocos2d "Expected specifier-qualifier-list before ..."等

iphone - UITableView 滚动问题