根据prefs显示/隐藏iphone UI元素 - 如何?

dav*_*000 7 iphone cocoa-touch interface-builder

我的iPhone应用程序中有一个简单的表单.表格通过IB和典型布线布局和管理(即我不是以编程方式创建此表单).

仅当设置了特定首选项时,才应显示其中一个字段(及其关联标签).

可以将字段和标签的alpha设置为0并在这种情况下禁用它们.问题是这个现在看不见的字段下方的字段会保留在同一个地方,并且会有一个很大的空白区域.我的目标是让屏幕看起来都处于正常状态.

有没有办法以编程方式删除(或添加)UI元素,并让下面的那些向上或向下移动以腾出空间?或者我应该考虑为第二种情况制作一个完整的其他NIB文件?(而且,如果我这样做,是否有一种简单的方法来分享共同的元素?)

显示两个控件的当前UI

同时使用http://img.skitch.com/20100704-bm41w6wtqkdgh1da99ihb7g32d.jpg

通过alpha == 0隐藏可选控件的UI

使用Alpha隐藏http://img.skitch.com/20100704-q2sxrj3nf6ya68wp6ubn86n2pa.jpg

所需的UI隐藏了可选控件

隐藏时所需http://img.skitch.com/20100704-82r876pgctee8gb51ujg1dwj7k.jpg

ohh*_*hho 8

当每个UI元素链接到IBOutlet指针时,例如

@property (nonatomic, retain) IBOutlet UITextField *field_a;
@property (nonatomic, retain) IBOutlet UITextField *field_b;
@property (nonatomic, retain) IBOutlet UITextField *field_c;
// ...
Run Code Online (Sandbox Code Playgroud)

您可以通过以下方式测试每个元素的可见性:

if (field_a.hidden) {
    // ...
} else {
    // ...
}
Run Code Online (Sandbox Code Playgroud)

并移动它们:

CGPoint pt = field_a.center;
pt.y -= 60;
field_a.center = pt;
Run Code Online (Sandbox Code Playgroud)

或者通过一些动画:

CGPoint position = field_a.center;
position.y -= 60;
[UIView beginAnimations:@"MoveUp" context:NULL];
[UIView setAnimationDuration:0.5];
field_a.center = position;
[UIView commitAnimations];  
Run Code Online (Sandbox Code Playgroud)

要隐藏元素:

field_a.hidden = YES;
Run Code Online (Sandbox Code Playgroud)

要显示元素:

field_a.hidden = NO;
Run Code Online (Sandbox Code Playgroud)