Xcode 4.2 iOS 5 : Multiple segues from a UITableView

后端 未结 3 1160
感动是毒
感动是毒 2020-12-30 09:24

I\'m starting now with Xcode on 4.2 for iOS5 and there are a few changes and I\'m now crossing a problem that I can\'t figure out a way to solve it.

I\'m doing an ex

相关标签:
3条回答
  • 2020-12-30 10:07

    Define two "generic" segues (identified as "segue1" and "segue2", for example) in the storyboard from your source view controller, one to each destination view controller. These segues won't be associated with any action.

    Then, conditionally perform the segues in your UITableViewDelegate:

    - (void)tableView:(UITableView *)tableView didSelectRowAtIndexPath:(NSIndexPath *)indexPath
    {
        // Conditionally perform segues, here is an example:
        if (indexPath.row == 0)
        {
            [self performSegueWithIdentifier:@"segue1" sender:self];
        }
        else
        {
            [self performSegueWithIdentifier:@"segue2" sender:self];
        }
    }
    
    0 讨论(0)
  • 2020-12-30 10:09

    Like @陳仁乾 and @Marco explained was completely correct. To make everything a little bit easier I would recommend you to use a single NSArray which will be initialized when viewDidLoad. Just name the segues the same as your UIViewControllers, this way you can Display a correct description of what UIViewControllers you can choose from and you can also perform the segues from this NSArray:

    (Actually I'm not sure if it can cause any problems calling the segue the same as the UIViewController you want to call. Please let me know if this is BadPractise)

    viewDidLoad

    - (void)viewDidLoad
    {
        [super viewDidLoad];
    
        _arraySessions = [[NSArray alloc] initWithObjects:
                          @"MyViewControllerName", nil];
    }
    

    cellForRowAtIndexPath

    - (UITableViewCell *)tableView:(UITableView *)tableView 
             cellForRowAtIndexPath:(NSIndexPath *)indexPath{
        UITableViewCell *cell = 
         [tableView dequeueReusableCellWithIdentifier:@"overviewCell"
                                         forIndexPath:indexPath];
    
        [cell.textLabel setText:_arraySessions[indexPath.row]];
    
        return cell;
    }
    

    didSelectRowAtIndexPath

    - (void)tableView:(UITableView *)tableView 
            didSelectRowAtIndexPath:(NSIndexPath *)indexPath{
        [self performSegueWithIdentifier:_arraySessions[indexPath.row] 
                                  sender:self];
    }
    
    0 讨论(0)
  • 2020-12-30 10:14

    I have the same problem as you do. The problem is that you can't link your tableViewCell to multiple view controllers. However you can link your source view itself to multiple view controllers.

    1. Control-drag the master view controller (instead of table view cell) from the scene viewer to whatever view controller you want to link. You can do this as much as you want. Notice that the segue shown in source view controller scene should be something like "Push Segue from Root View Controller ..." instead of "Push Segue from NavCell to ...".

    2. Identify each segue link a unique name like "toDetailView1"

    3. Finally, custom the selection in your source view controllers:

      - (void)tableView:(UITableView *)tableView didSelectRowAtIndexPath:(NSIndexPath *)indexPath
      {
          if (indexPath.row % 2 == 1) {
              [self performSegueWithIdentifier:@"toDetailView1" sender:self];
          } else {
              [self performSegueWithIdentifier:@"toDetailView2" sender:self];
          }
      }
      
    0 讨论(0)
提交回复
热议问题