gpt4 book ai didi

iphone - Interface Builder 中的多个 View 状态

转载 作者:行者123 更新时间:2023-12-03 19:10:50 24 4
gpt4 key购买 nike

我正在处理具有 3 种状态的屏幕:

  • 正在验证
  • 正在加载
  • 错误

前两个非常简单,因为只更改了标签文本。第三个比较棘手,因为我需要显示一条错误消息并在其上有一个重试按钮。

此外,我希望将所有这些都放在一个 Controller 下(我想这是最简单的部分。)

问题是:如何在 Interface Builder 中执行多个 View 状态?以前有人这样做过吗?还是我以错误的方式处理这个问题?

最佳答案

您可以尝试添加根据需要添加或删除的其他 View 。在带有“文件所有者”、“第一响应者”、“ View ”等的窗口中,从库中添加三个 UIView。您可能需要将它们的名称从“View”更改为“Validating”、“Loading”和“Error”。

现在打开每一个,并通过添加按钮、标签和其他类似的东西来自定义它。

返回 XCode,声明新 View :

IBOutlet UIView *validView;
IBOutlet UIView *loadView;
IBOutlet UIView *errorView;

并确保在 InterfaceBuilder 中进行适当的连接。您希望从任何这些 View 链接的任何操作都应该效果很好。

现在,要进行切换,请创建一个操作(或三个不同的操作)。这可以是 IBAction,也可以不是,如您所愿。在标题中:

-(void)showError;

现在为了实现,您可能需要这样的东西。

-(void)showError {
// skip this if you always arrive from the validView
if ([validView superview]) {
[validView removeFromSuperview];
}
[self.view addSubview:errorView];
}

如果您愿意,您可以更喜欢动画:

    -(void)toggleErrorWithFlip {
[UIView beginAnimations:nil context:nil];
[UIView setAnimationDuration:0.8];
[UIView setAnimationTransition:([errorView superview] ? UIViewAnimationTransitionFlipFromLeft : UIViewAnimationTransitionFlipFromRight)
forView:[self view]
cache:YES];
if ([errorView superview]) {
[errorView removeFromSuperview];
} else {
[[self view] addSubview:errorView];
}
[UIView commitAnimations];
}

“重试”按钮可能会触发以下操作:

-(IBAction)retryLoad {
[errorView removeFromSuperview];
[self.view addSubview:validView];
// do some stuff that retries whatever was tried and failed
}

同样,无论有没有动画,这种情况都可能发生。

如果有一个默认 View ,您总是依赖该 View (例如 validatingView),则将其设为原始“ View ”,然后在其顶部添加其他两个 View (例如 loadView 和 errorView)。这可能会节省一些工作,具体取决于您希望事情如何进行。

关于iphone - Interface Builder 中的多个 View 状态,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/5117721/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com