如何在ios中以有效的方式一次隐藏多个视图

时间:2016-05-19 06:07:02

标签: ios objective-c logic

在我当前的项目中,我需要在单个视图控制器中维护多个容器控制器。视图控制器上有四个按钮。如果选择第一个按钮,则第一个容器将可见,剩余部分将处于隐藏状态。与第二,第三和第四按钮类似。在任何时候,用户只能看到一个。我可以通过显示相应的容器并通过硬编码隐藏休息来实现它。

@property UIView *view1;
@property UIView *view2;
@property UIView *view3;
@property UIView *view4;

- (iBAction *)firstButtonClicked:(UIButton *)button {
self.view1.hidden = NO;
self.view2.hidden = YES;
self.view3.hidden = YES;
self.view4.hidden = YES;
}

- (iBAction *)secondButtonClicked:(UIButton *)button {
self.view1.hidden = YES;
self.view2.hidden = NO;
self.view3.hidden = YES;
self.view4.hidden = YES;
}

- (iBAction *)thirdButtonClicked:(UIButton *)button {
self.view1.hidden = YES;
self.view2.hidden = YES;
self.view3.hidden = NO;
self.view4.hidden = YES;
}

- (iBAction *)fourthButtonClicked:(UIButton *)button {
self.view1.hidden = YES;
self.view2.hidden = YES;
self.view3.hidden = YES;
self.view4.hidden = NO;
}

但我对这种方法并不满意。我尝试在堆栈溢出中搜索答案,但没有成功。  如果任何机构知道任何有效的方法来实现它,请告诉我。

感谢。

4 个答案:

答案 0 :(得分:2)

有一些可能的解决方案。这是一个选择。

首先,给每个按钮一个特定的标签。给按钮1一个标签1.给按钮2一个2等的标签

然后对所有四个按钮使用单个操作,而不是现在使用的四个单独操作。

然后实现这样的一个动作方法:

- (IBAction *)buttonClicked:(UIButton *)button {
    self.view1.hidden = button.tag != 1;
    self.view2.hidden = button.tag != 2;
    self.view3.hidden = button.tag != 3;
    self.view4.hidden = button.tag != 4;
}

如果点按标记为1的按钮,则button.tag != 1将为false,因此self.view1.hidden将设置为NO。其他3个条件为真,因此其他按钮的hidden设置为YES

同样的逻辑适用于其他三个按钮,每个按钮都有自己的标签值。

答案 1 :(得分:2)

将视图标记设置为201到204或您喜欢的任何内容,相应地设置for循环。

将所有按钮的操作指向下面的选择器,

- (void)anyButtonClicked:(UIButton *)button 
{

    for (int iterator = 201; iterator < 204; iterator ++) 
    {
        UIView *currentView = [self.view viewWithTag:iterator];

        if (currentView.tag == button.tag) 
        {

            [currentView setHidden:NO];

        } else {

            [currentView setHidden:YES];
        }        
    }
}

答案 2 :(得分:1)

你也可以尝试一下它也会消耗更少的内存 -

[yourview removeFromSuperview];
        yourview = nil; 

答案 3 :(得分:1)

任何时候只隐藏一个视图。为什么你需要隐藏/取消隐藏所有这些?只需执行以下操作(在@property声明之后):

UIView *lastVisible = view1;

然后你可以把动作写成:

- (IBAction *)firstButtonClicked:(UIButton *)button {
lastVisible.hidden = YES;
self.view1.hidden = NO;
lastVisible = self.view1;
}

等等。这假定view1最初是可见视图。