保持 UIView 从一个控制器到另一个控制器

Keep UIView from one controller to another controller

我在我的应用程序中使用 https://github.com/ali-ehsan/GIFProgressHUD 作为加载微调器,但它似乎只附加到一个视图,所以如果我在过渡期间从登录屏幕加载到主屏幕此进度 HUD 将自动消失。

有没有办法让视图停留在屏幕之间,有点像 activity 指示器?

我正在 Objective-C 开发。

添加(附加)您的进度视图到应用程序的主 window,而不是控制器的子视图或在您转换时被删除的视图。

A - 使用 KVC

id appDelegate = [UIApplication sharedApplication].delegate;
UIWindow *keyWindow = [appDelegate valueForKey:@"window"];

B - 使用 UIApplication

的键window 属性
UIWindow *keyWindow = [[UIApplication sharedApplication] keyWindow];

此 属性 包含最近发送 makeKeyAndVisible 消息的 UIWindow 对象。

C - 使用 windows 属性 的 UIApplication

UIWindow *keyWindow = [[UIApplication sharedApplication] windows].lastObject;

建议:只需标记您的进度视图,以便您以后需要删除它时可以轻松找到它。

更新: 现在您有了主要的 window(层次结构中最顶层的视图),您可以像您一样添加您喜欢的任何类型的堆栈对象(视图、标签、activity 指示器等)将对任何 UIView.

// Easiest and most readable way to get the key window
UIWindow *keyWindow = [UIApplication sharedApplication].keyWindow; 

UIView *testview = [[UIView alloc] initWithFrame:CGRectMake(0, 0, 100, 100)];
testview.backgroundColor = [UIColor redColor];
[keyWindow addSubview:testview];

testview.center = keyWindow.center;

更新 2:

如果您以传统 UIViewController 转换和演示之外的方式导航,作为最后的手段,您始终可以 添加一个新的 window堆栈 as seen here in this SO post.

如果视图消失的问题仍然存在,您可能想尝试更改浏览视图/控制器的方式在控制器之间传递引用以允许此"disappearing" 观看生活。

Another reference regarding this type of navigation.