iPhone更换UIView/子视图的内容

3

我正在尝试完成以下任务:

使用UIButtons或工具栏交换UIView或子视图的内容。我已经像下面的插图一样布置了一个视图。我想通过单击按钮或工具栏上的按钮来替换“要交换的UIView”子视图的内容。因此,您点击按钮1,就会加载一个视图到“要交换的UIView”。这有意义吗?有人能否提供任何教程?我知道如何使用图像做到这一点,但我想交换更复杂的视图。

{{link1:alt text http://yesimarobot.com/images/swap-uiviews.png}}

4个回答

2
你可以很容易地做到这一点。以下是我的建议:
1)创建一个UIView以容纳要交换的视图。它应该与你图片中要交换的UIView大小和位置相同。我将其称为“container”。
2)构建你想要交换的四个UIView。将它们放入NSArray中,我将其称为“viewArray”。
3)将你的按钮连接到IBAction方法。此方法应确定所按按钮的索引(按名称或标记),删除所有container的子视图,将[viewArray objectAtIndex:myIndexFromButton]子视图添加到container。
4)完成了。如果你愿意,可以根据需要动态创建视图,但这是一般思路。

谢谢David。我应该使用exchangeSubviewAtIndex来替换视图吗? - yesimarobot
你可以研究一下,但我从未使用过它。我倾向于删除所有并添加您想要的一个,这样您就不必跟踪当前可见的内容或获取其句柄,但是玩弄一下也不会太难。 - David Kanarek
1
我查了一下。exchangeSubviews不起作用,因为它只是交换两个子视图的位置,而不是将一个取出并放入另一个。虽然如果您将所有子视图添加到容器中,并跟踪顺序,则可以使用它,但这会很复杂。我不建议这样做。 - David Kanarek
谢谢David。我会按照你的建议进行删除和添加。 - yesimarobot

1
你需要做的是创建一个容器视图,并将所有图像视图作为子视图添加到其中,但除了要首先显示的那个视图外,设置它们的属性隐藏为true。
创建一个具有所需动画(例如淡入淡出、推动、移动等)的CATransition。将转换添加到容器视图的图层中。
然后,要显示不同的视图,只需切换两个子视图的隐藏属性,转换将为您动画地进行更改。
CATransition会看起来像这样:
// Create a transition
CATransition *transition = [CATransition animation];
transition.duration = 0.25f;
transition.timingFunction = [CAMediaTimingFunction functionWithName:kCAMediaTimingFunctionEaseInEaseOut];
transition.type = kCATransitionMoveIn;
transition.subtype = kCATransitionFromRight;
transition.delegate = self; 

// Add the transition to the content view's layer
[self.view.layer addAnimation:transition forKey:nil];

0
有道理。不过,使用 UIViewreplaceSubview:with: 方法怎么样?
如果您的视图不是很重,则还可以在父视图中同时保留所有 4 个视图,并简单地隐藏 / 显示适当的视图。

我没有看到那个方法。你是指CALayer的replaceSublayer吗? - David Kanarek
那是一个 NSView 的方法。我不认为它存在于 UIView 上。 - TomSwift
@TomSwift 不,它不会。但是,removeFromSuperview和addSubview:会。 - user749127

0
以上的答案是可行的,但更加优雅的方式是使用4个视图控制器而不是4个视图。这样可以在需要时才创建实际的视图,并在设备内存不足时卸载一些隐藏的视图。
(你基本上是在重新发明苹果的UITabBarController,它也使用视图控制器)

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接