在我当前的项目中,我需要在单个视图控制器中维护多个容器控制器。视图控制器上有四个按钮。如果选择第一个按钮,则第一个容器将可见,剩余部分将处于隐藏状态。与第二,第三和第四按钮类似。在任何时候,用户只能看到一个。我可以通过显示相应的容器并通过硬编码隐藏休息来实现它。
@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;
}
但我对这种方法并不满意。我尝试在堆栈溢出中搜索答案,但没有成功。 如果任何机构知道任何有效的方法来实现它,请告诉我。
感谢。
答案 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最初是可见视图。