gpt4 book ai didi

ios - 为场景设置母版页

转载 作者:行者123 更新时间:2023-11-29 12:53:21 25 4
gpt4 key购买 nike

注意:我说的不是主从 Split View!

有一个与此类似的问题(Master page concept in Iphone development),但该问题仅涉及标准功能,而不是布局本身。此外,答案仅显示如何避免重复代码,但您仍然必须在每个场景中链接 IBAction。也许我们可以扩展链接的问题并发现一些更好的解决方案:-)

所以,我想为我的应用程序中的所有场景/ View Controller 定义一个母版页。这是一个常见的任务,例如在网络开发中(即 ASP.NET Masterpages )。

母版页将包括实际布局(背景颜色、标题所在位置、内容所在位置等)和所有场景中存在的标准功能(打开菜单、返回、打开帮助页面等)

使用 Interface Builder(带或不带 Storyboard),实现该目标的最佳方法是什么?

这是我的想法:

选项 1:为标准功能子类化 UIViewController,在每个场景/viewcontroller 中复制粘贴通用布局。

优点:相当容易使用,只需复制粘贴所有控件,在 IB 中设置父类并连接标准功能按钮即可。

缺点:如果你有大量的场景,很乏味,你很容易忘记连接标准功能。如果由于任何原因主布局发生变化,你就完蛋了。

选项 2:子类 UIViewController,在 viewDidLoad 的某处以编程方式添加布局,您还可以在其中设置事件目标

优点:布局和功能都在一个地方处理,很容易改变。

缺点:您需要以编程方式设置布局,如果您在其他地方使用 IB,这会不一致。您在 IB 中看不到主布局,因此您必须在 IB 中配置场景的其余部分时“想象”它在那里。如果没有 Storyboard,您可以使用 XIB 仅设计内容 View ,但您永远无法在 IB 中获得“全貌”。此外,这不适用于 Storyboard。

这两个选项对我来说都不是很优雅。您采用什么方法来做到这一点(这一定是一个常见问题!)?

最佳答案

有很多方法可以做到这一点。下面是我最喜欢的两种方式。

在两者中,您都从(使用您的术语)MasterVC 开始。对公共(public)元素进行所有布局和设计。然后对于 contentView,要么:

  1. 放入一个单独的 View ,并以编程方式添加 childViewControllers;或
  2. 放入一个包含 UICollectionView 的 containerView。在collectionView中创建一个占据整个collectionView的cell。创建一个带有一个 socket (pageView,在我的示例中)的自定义单元格类,并以两种方式之一从 Storyboard 中加载 ViewController。要么将您的 VC 的标识符设置为表示它们将出现在 collectionView 中的位置的数字,要么创建一个 VC 名称数组。然后,每当用户导航到某个 VC 时,您就告诉 collectionVC 滚动到该索引。

cellForItemAtIndexPath 中的实现看起来像这样:

- (UICollectionViewCell *)collectionView:(UICollectionView *)collectionView cellForItemAtIndexPath:(NSIndexPath *)indexPath
{
AMMasterCollectionViewCell *cell = [collectionView dequeueReusableCellWithReuseIdentifier:@"Cell" forIndexPath:indexPath ];

for (UIView *view in cell.pageView.subviews)
[view removeFromSuperview];

NSString *viewID = self.arrayOfViewControllerNames[indexPath.item];

AMMasterViewController *viewController = [self.storyboard instantiateViewControllerWithIdentifier:viewID];
AMMasterView *pageView = (AMMasterView *)viewController.view;
[cell.pageView addSubview:pageView];

[self addChildViewController:viewController];
[viewController didMoveToParentViewController:self];

return cell;
}

我已经这样做了很多次,而且效果很好。

关于ios - 为场景设置母版页,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/21860675/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com