Ios 故事板和编程视图

Ios 故事板和编程视图,ios,uiview,storyboard,xib,Ios,Uiview,Storyboard,Xib,我完全被这个问题迷住了。我一直在使用故事板,我创建了一个带有TableView和一些东西的导航控制器。在tableview的每一行中都有服务,我需要为每个服务创建一个详细视图 有很多服务,所以我不能在情节提要中创建它们。其想法是从Web服务下载服务(参数数量、每个参数的类型等),并根据需要将文本字段/按钮添加到服务 因此,我的问题是: 1) 我可以通过编程方式组合故事板和视图吗?当我在MyTableviewClass中创建NewView时,我应该在prepareforsegue方法中创建它吗?如

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

有很多服务,所以我不能在情节提要中创建它们。其想法是从Web服务下载
服务
(参数数量、每个参数的类型等),并根据需要将文本字段/按钮添加到
服务

因此,我的问题是:

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

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

听起来好像一个tableView中只有多个单元格。不使用分段,您只需创建具有不同标识符的不同单元格,并根据从web服务填充的服务数组中检测到的服务显示或隐藏它们

听起来好像一个tableView中只有多个单元格。不使用分段,您只需创建具有不同标识符的不同单元格,并根据从web服务填充的服务数组中检测到的服务显示或隐藏它们

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

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

我向你推荐这个。返回到
情节提要
并创建新的UIViewController场景。单击第一个场景,然后按住CTRL键并拖动到新场景。接下来,单击您的segue并为其命名

第1步:

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

第二步:

返回您的
情节提要
,然后单击场景以将其选中。接下来,单击
文件所有者
,最后单击类信息按钮(第三个按钮),最后选择您刚刚创建的
ServiceViewController

第三步:

回到
ServicesViewController
中的
didselectrowatinex
方法调用序列:

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

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

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

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

我向你推荐这个。返回到
情节提要
并创建新的UIViewController场景。单击第一个场景,然后按住CTRL键并拖动到新场景。接下来,单击您的segue并为其命名

第1步:

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

第二步:

返回您的
情节提要
,然后单击场景以将其选中。接下来,单击
文件所有者
,最后单击类信息按钮(第三个按钮),最后选择您刚刚创建的
ServiceViewController

第三步:

回到
ServicesViewController
中的
didselectrowatinex
方法调用序列:

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

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

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

此时,使用跳蚤代码:

- (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的视图,segue是不合适的。如果您需要根据所选行在
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.
}

我希望这有帮助

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