故事板:如何在多个地方使用相同的视图控制器?

时间:2014-09-30 13:54:07

标签: ios storyboard

多年来,我手工编写了我的iPhone应用程序视图代码,但现在我又为故事板添加了一些外观。

我的代码中的一个常见模式是在两个地方使用相同的视图控制器,但具有轻微的UI变化。例如,在浏览品牌列表(BrandListController)时,我想显示系统中所有品牌的表格视图;点击一个品牌向您展示其产品。但是当按品牌过滤商品时,我想显示品牌的表格视图(具有相同的内容和相同的单元格外观),但我想点击一行将您带回过滤器屏幕向您展示该品牌的商品。我也喜欢"搜索"右上角的栏按钮项目。

通过添加布尔成员变量,可以很容易地在代码中完成这些操作,这样控制器就可以在它出现之前进行配置。

但是我如何用故事板做到这一点?我可以将多个控制器转换为BrandListController的同一个实例,但同样,我希望控制器具有不同的行为,并根据其使用方式包含/排除UI元素。在故事板中创建BrandListController的两个单独实例似乎是一个坏主意,因为那时我将不得不复制所有插座连接,并且我必须保持同步更改。但是我的其他选择是什么?

1 个答案:

答案 0 :(得分:3)

使用Storyboard可以实现的是,您不必只使用一个故事板。

您可以使用多个故事板或将它们与笔尖等结合使用......

但是,在这种情况下,你可以做的仍然是在控制器上使用boolean属性。

然后在其他控制器的prepareForSegue方法中,您可以设置此布尔属性以更改行为。您甚至可能有几个笔尖定义了一小部分UI,可根据属性放置到视图中。

我已经完成了这样的操作,也可以将块传递给视图控制器。

例如......

我有一个"用户搜索"具有默认行为的控制器,如果您点按某个用户,它将推送到该用户的个人资料页面。

但我可以传入一个代码块,例如,它会解雇搜索控制器,并使用所选用户为它们创建新消息(或其他)。或完全取决于我传入的代码块的其他内容。

修改

大声笑,只是重新阅读你的问题。我用积木做的也适合你。我创建了一个名为userTappedBlock的块属性。如果存在,那么我在点击单元格时运行它。如果不是,我会执行默认行为。