2009-10-13 67 views
1

我有关于Nib和UISegmentedControls的最佳实践类型的问题。从UISegmentedControl更改视图

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

一切工作正常,但我怀疑我的方法是有缺陷的,并想知道如果有人可以建议我这样做的意思是做到这一点。

目前在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个笔尖文件吗?如果是这样的话,我应该如何在segmentControl被按下时加载它们?你可以指示我的任何示例代码?

感谢

回答

2

了我的头顶部,这里有一对夫妇的事情,你可以尝试:

1)在IB做3个独立的UIView对象,但不要将其添加到视图层次结构

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

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

在连接选项卡

,连接将控制器的视图属性视为其中一个视图。

这设置了默认值。

现在

在你的代码,你可以更改视图连接到:

[myViewController的setView:视图2]。

并重新加载视图。

2)使一个真正高视图(或真宽视图),当你点击一个已分割视图按钮,以使其显示于用户改变视图瓦特/相对于父视图的帧的y位置,好像它们'将分开页面

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

+0

你能澄清你的意思吗?使3个独立的UIView对象,但不要将它们添加到视图层次结构。你的意思是'通过将每个视图从库拖动到标题为YourNib.nib或YourXib.xib的窗口来创建3个视图。 – 2014-11-18 15:33:20

1

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