【问题标题】:Show/Hide iphone UI elements based on prefs - how to?根据首选项显示/隐藏 iphone UI 元素 - 如何?
【发布时间】:2011-03-11 16:31:09
【问题描述】:

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

只有在设置了特定首选项时才应显示其中一个字段(及其相关标签)。

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

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

显示两个控件的当前 UI

With Both http://img.skitch.com/20100704-bm41w6wtqkdgh1da99ihb7g32d.jpg

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

Using Alpha to Hide http://img.skitch.com/20100704-q2sxrj3nf6ya68wp6ubn86n2pa.jpg

隐藏可选控件的所需 UI

Desired when hidden http://img.skitch.com/20100704-82r876pgctee8gb51ujg1dwj7k.jpg

【问题讨论】:

    标签: iphone cocoa-touch interface-builder


    【解决方案1】:

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

    @property (nonatomic, retain) IBOutlet UITextField *field_a;
    @property (nonatomic, retain) IBOutlet UITextField *field_b;
    @property (nonatomic, retain) IBOutlet UITextField *field_c;
    // ...
    

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

    if (field_a.hidden) {
        // ...
    } else {
        // ...
    }
    

    然后移动它们:

    CGPoint pt = field_a.center;
    pt.y -= 60;
    field_a.center = pt;
    

    或者通过一些动画:

    CGPoint position = field_a.center;
    position.y -= 60;
    [UIView beginAnimations:@"MoveUp" context:NULL];
    [UIView setAnimationDuration:0.5];
    field_a.center = position;
    [UIView commitAnimations];  
    

    隐藏元素:

    field_a.hidden = YES;
    

    显示一个元素:

    field_a.hidden = NO;
    

    【讨论】:

    • 我最终做的差不多就是这个,但是,我得到了我隐藏的元素的高度,并将下面的元素向上移动了那个量,以避免在那里有实际值。
    【解决方案2】:

    使用可可触摸属性:

    .隐藏 1 .userInteractionEnabled 0

    或者你可以:

    .alpha = 0

    【讨论】:

      【解决方案3】:

      我最近看到一个关于此的教程,其中涉及在选择分段控件时将子视图在主视图中进一步向下移动。我相信这是由beginAnimations:context: 触发的动画,但我现在找不到该教程的参考。

      本质上,一个视图下的一些视图被隐藏了,一组被移开而其他控件未被隐藏。

      【讨论】:

        猜你喜欢
        • 2017-02-20
        • 1970-01-01
        • 2017-12-03
        • 1970-01-01
        • 2020-11-07
        • 1970-01-01
        • 2019-08-04
        • 1970-01-01
        • 2021-10-10
        相关资源
        最近更新 更多