1

我完全迷失在这个问题上。我一直在使用故事板,我创建了一个带有表格视图和一些东西的导航控制器。表格视图的每一行都有Services,我需要为每个服务创建一个详细视图。

有很多服务,所以我无法在情节提要中创建它们。这个想法是Services从网络服务(参数数量,每个类型等)下载,并根据需要添加为文本字段/按钮到Service.

所以,我的问题和疑问是:

1)我可以以编程方式组合故事板和视图吗?当我创建一个NewViewin 时MyTableviewClass,我应该在我的prepareforsegue方法中执行它吗?如何在不丢失导航控制器的情况下在屏幕上显示它?这就是我所拥有的(它不起作用:它告诉我没有名称为 'Service1' 的 segue):

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

if ([[segue identifier] isEqualToString:@"NextLevel"]) {
    [segue.destinationViewController setActualNodo:[actualNodo getSonAtIndex:indexPath.row]];
} else if ([[segue identifier] isEqualToString:@"Service1"]) {
    CGRect bounds = self.view.bounds;
    UIView *myview  = [[UIView alloc] initWithFrame:bounds];
    [myview setBackgroundColor: [UIColor redColor]];
    [self.view addSubview:myview];
    [self.view bringSubviewToFront:myview]; }

欢迎任何书籍或参考资料,但我找不到类似的东西。这在iOS中非常复杂吗?我在 Java 中做过类似的事情。我已经阅读了有关使用 XIB 动态生成接口的信息,但是说实话,我不知道它是什么。谢谢大家。

4

3 回答 3

2

除了 Flea 的回答,如果您需要保留导航控制器,只需通过控制从表视图控制器的文件所有者图标(视图控制器视图下的黄色框)拖动到您的 ServiceViewController 来在情节提要中创建推送 segue添加到情节提要中,这应该会显示一个弹出窗口,您可以在其中选择“push”作为segue的类型。接下来,选择 segue 并在属性检查器中(第四个按钮,在快照中的那个旁边)并在“标识符”文本字段中键入您的 segue 的唯一标识符,例如serviceSegue.

此时,使用 Flea 的代码:

- (void)tableView:(UITableView *)tableView didSelectRowAtIndexPath:(NSIndexPath *)indexPath
{
     [self performSegueWithIdentifier:@"serviceSegue" sender:nil];
}

在您发布的代码中:

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

    if ([[segue identifier] isEqualToString:@"serviceSegue"]) 
        [segue.destinationViewController setActualNodo:[actualNodo getSonAtIndex:indexPath.row]];
}

我不确定你想用另一个 segue “Service1”做什么,但如果你想改变 TableViewController 的视图,segues 不是这样做的方法。如果有任何事情,您应该 didSelectRowAtIndexPath根据所选行在方法中执行此操作:

- (void)tableView:(UITableView *)tableView didSelectRowAtIndexPath:(NSIndexPath *)indexPath
{
     if (You want to transition to other view controller)
         [self performSegueWithIdentifier:@"serviceSegue" sender:nil];
     else
         Change your view here.
}

我希望这有帮助!

于 2013-05-10T15:55:02.183 回答
2

是的,您可以创建一个StoryBoard带有视图的视图,然后以编程方式向其中添加视图。

prepareForSegue您不应该尝试在您的方法中创建视图。这确实应该用于将对象传递给另一个ViewController.

我会向你推荐这个。回到你的StoryBoard并创建一个新的 UIViewController 场景。单击您的第一个场景并CTRL拖动到新场景。接下来,单击您的 segue 并为其命名。

步骤1:

创建一个名为ServicesViewController的新类,并确保它是 UIViewController 的子类:

**在此处输入图片描述**

第2步:

返回您的StoryBoard并单击场景以将其选中。接下来,单击Files Owner并最后单击类信息按钮(第三个按钮),最后选择您ServiceViewController刚刚创建的类。

在此处输入图像描述

第 3 步:

回到你ServicesViewControllerdidSelectRowAtIndex方法调用你的序列:

- (void)tableView:(UITableView *)tableView didSelectRowAtIndexPath:(NSIndexPath *)indexPath
{
    [self performSegueWithIdentifier:@"YOUR_SEGUE_NAME" sender:nil];
}

现在,清除prepareForSegue方法中的所有代码,然后先关闭转换。

于 2013-05-09T19:47:25.157 回答
1

听起来您在 tableView 中只有多个单元格。除了使用 segue,您可以简单地创建具有不同标识符的不同单元格,并根据从您的 Web 服务填充的服务数组中检测到的服务来显示或隐藏它们。

于 2013-05-09T18:27:49.350 回答