从UISegmentedControl更改视图

时间:2009-10-13 12:04:26

标签: iphone objective-c

关于Nibs和UISegmentedControls,我有一个最佳实践类型的问题。

我有一个nib文件,其中包含一个带3个按钮的UISegmentedControl。当切换时,每个视图在窗口的主要部分显示不同的视图。

一切都运转良好,但我怀疑我的方法存在缺陷,并且想知道是否有人可以建议我“意味着”这样做。

目前在NIB中我有3个UIViews叠加在一起,然后在.m文件中我修改每个UIViews .hidden隐藏并显示我感兴趣的那个。

- (IBAction)segmentAction:(id)sender
{
    if([sender selectedSegmentIndex] == 0)
    {
        [self.view1 setHidden:NO];
        [self.view2 setHidden:YES];
        [self.view3 setHidden:YES];
    }
    else if([sender selectedSegmentIndex] == 1)
    {
        [self.view1 setHidden:YES];
        [self.view2 setHidden:NO];
        [self.view3 setHidden:YES];
    }
    else if([sender selectedSegmentIndex] == 2)
    {
        [self.view1 setHidden:YES];
        [self.view2 setHidden:YES];
        [self.view3 setHidden:NO];
    }
}

一切都“有效”但是nib文件很难编辑,因为你不能轻易地“关闭”其他UIViews所以我总是在画布上选择错误的元素。 IB也抱怨:“这个视图与其中一个兄弟姐妹重叠”在信息对话框中。

鉴于我希望所有视图都在InterfaceBuilder中进行布局,我应该采取什么方法。我应该有4个nib文件吗?如果是这样,我应该在按下segmentControl时加载它们?您可以指示我的任何示例代码吗?

感谢

2 个答案:

答案 0 :(得分:2)

在我的脑海中,您可以尝试以下几种方法:

1)在IB中制作3个单独的UIView对象,但不要将它们添加到视图中#irapchy

假设您有一个视图控制器,其中包含所有三个视图,您可以在IB中通过将每个视图从库拖动到标题为YourNib.nib或YourXib.xib的窗口来创建3个视图。因此,请勿将视图拖动到视图控制器的主视图中。

现在你可以双击每一个并自己编辑它们,而不必尝试选择不同的视图,因为它们是重叠的(因为它们不是)

在“连接”选项卡中,将视图控制器的视图属性连接到其中一个视图。

这会设置默认值。

现在在您的代码中,您可以更改连接到的视图:

[myViewController setView:view2];

并重新加载视图。

2)制作一个非常高的视图(或非常宽的视图),并在单击分段视图按钮时更改视图的y位置,使其对用户显示为好像他们'重新分开页面

这使得在“视图”之间进行动画和转换变得容易。虽然会占用更多内存,因为即使它们不可见,也会加载所有元素。但无论如何你都是这样做的。

答案 1 :(得分:1)

这会像你拥有它一样有效,但你说得对它并不理想。没有任何上下文,实现它的最自然的方法是管理三个UIViewControllers的UITabBarController,每个UIViewControllers都有自己的视图。当你切换视图(viewWill / DidAppear,viewWill / DidDisappear等)时,你将获得所有回调的好处+更容易分离你的nib文件。回调对于在适当的时间加载/重新加载数据非常有用。