1

我正在尝试将单元格从 UITableViewController 链接到 UIViewController,但是每个单元格都必须调用不同的 UIViewController(所以我想我必须为每个视图控制器创建一个链接)而且我不知道如何链接它们通过故事板。

这是我到目前为止所拥有的:

主视图.h

@interface MainView : UITableViewController <UITableViewDelegate, UITableViewDataSource>
{
    NSArray *tableData;
}
@property (nonatomic, retain) NSArray *tableData;
@end

主视图.m

- (void)viewDidLoad
{
    tableData = [[NSArray alloc] initWithObjects:@"1", @"2", @"3", @"4", nil];
    [super viewDidLoad];
}

- (NSInteger)tableView:(UITableView *)tableView numberOfRowsInSection:(NSInteger)section
{
    return [tableData count];
}

- (UITableViewCell *)tableView:(UITableView *)tableView cellForRowAtIndexPath:(NSIndexPath *)indexPath
{
    UITableViewCell *cell = nil;
    cell = [tableView dequeueReusableCellWithIdentifier:@"MyCell"];
    if (cell == nil)
    {
        cell = [[UITableViewCell alloc] initWithStyle:UITableViewCellStyleDefault reuseIdentifier:@"MyCell"];
    }
    cell.textLabel.text = [tableData objectAtIndex:indexPath.row];
    return cell;
}

- (void)tableView:(UITableView *)tableView didSelectRowAtIndexPath:(NSIndexPath *)indexPath {
    [tableView deselectRowAtIndexPath:indexPath animated:YES];
    UIViewController *anotherVC = nil;
    if (indexPath.section == 0) //here I've also tried to use switch, case 0, etc
    {
        if (indexPath.row == 0)
        {
            anotherVC = [[ViewForFirstRow alloc] init];
        }
    NSLog(@"anotherVC %@", anotherVC); // shows that anotherVC = ViewForFirstRow
    [anotherVC setModalPresentationStyle:UIModalPresentationFormSheet];
    [anotherVC setModalTransitionStyle:UIModalTransitionStyleFlipHorizontal];
    [self.navigationController pushViewController:anotherVC animated:YES];
    }
}

@end

So, when first row is selected and I didn't link UITableViewController to UIViewController (ViewForFirstRow), it shows a black screen.

如果我将 UITableViewController 链接到 ViewForFirstRow,它会打开视图但没有我在代码中使用的效果[self.navigationController pushViewController:anotherVC animated:YES];,所以看起来它调用视图是因为链接而不是因为代码[self.navigationController pushViewController:anotherVC animated:YES];

如何通过代码正确调用视图以及我应该在情节提要中使用哪种链接?另外,如何将 UITableViewController 链接到多个 UIViewController(ViewForFirstRow、ViewForSecondRow、ViewForThirdRow 等)。

谢谢!

4

2 回答 2

2

首先,您不能在情节提要中从单元格(在动态表格视图中)连接转场,您必须在代码中完成。代码应如下所示:

- (void)tableView:(UITableView *)tableView didSelectRowAtIndexPath:(NSIndexPath *)indexPath {
    [tableView deselectRowAtIndexPath:indexPath animated:YES];

    if (indexPath.row == 0) {
        UIViewController *anotherVC = [self.storyboard instantiateViewControllerWithIdentifier:@"anotherVC"];
        [self.navigationController pushViewController:anotherVC animated:YES];
    }else if (indexPath.row == 1) {
        UIViewController *someOtherVC = [self.storyboard instantiateViewControllerWithIdentifier:@"someOtherVC"];
        [self.navigationController pushViewController:someOtherVC animated:YES]; 
    } 
}

你不应该对 indexPath.section 做任何事情,因为你的表格视图只有一个部分。

于 2013-01-21T03:18:38.377 回答
1

在情节提要中以模态方式呈现另一个视图控制器,然后使用:

UIStoryboard *mainStoryboard = [UIStoryboard storyboardWithName:@"MainStoryboard" bundle:nil];
  Synergy *objSynergy = (Synergy *)[mainStoryboard instantiateViewControllerWithIdentifier:@"Synergy"];
 [self presentModalViewController:objSynergy animated:YES];

Synergy 是我的控制器名称 您可以在此处输入您想要显示的控制器名称。

根据您的要求进行更改。并且对于从不同行打开的不同视图控制器

用这个:

       if (indexPath.section==0) 
          {
              if (indexPath.row ==0) 
              {
              }
          }
于 2013-01-21T03:09:09.723 回答