iphone - Interface Builder 中的多个 View 状态

标签 iphone interface-builder

我正在处理具有 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/

相关文章:

iPhone SDK : Inserting and updating a UITableView with a new row

ios - 在 Storyboard 中创建可重用的 View

iphone - 关于Cocoa Touch Controls可扩展性的问题

objective-c - 尝试将 UIImageView 设置为背景 - 布局菜单项在哪里

iphone - stringByReplacingOccurrencesOfString不起作用

iphone - 仅使用 iOS 5 设备和 iOS 4 模拟器测试应用程序可以吗?

iphone - "Warp"到 iPhone iOS 查看

iphone - iPhone SDK:反转WAV文件的播放

显示带有约束的 View Controller 时,xcode 6 界面构建器的性能非常低

ios - 如何在 Interface Builder 中将 UITableViewCell 的内容 View 转换为普通的 UIView?