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

时间:2018-01-18 21:09:07

标签: ios objective-c uiview uiviewcontroller subview

我在我的应用中使用https://github.com/ali-ehsan/GIFProgressHUD作为加载微调器,但它似乎只附加到单个视图,因此如果我从登录屏幕加载到主屏幕,则在转换期间这个进度会自动消失。

有没有办法让我可以在屏幕之间停留一种类似于活动指示器的视图?

我在Objective-C中开发。

1 个答案:

答案 0 :(得分:1)

将进度视图添加(附加)到应用程序的主窗口,而不是转换时要删除的控制器或视图的子视图。

A - 使用KVC

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

B - 使用UIApplication的keywindow属性

UIWindow *keyWindow = [[UIApplication sharedApplication] keyWindow];

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

C - 使用UIApplication

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

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

<强>更新 现在您已经拥有了主窗口(层次结构中最顶层的视图),您可以添加任何类型的堆栈对象(视图,标签,活动指示器等),就像您对任何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转场和演示文稿之外进行导航,那么最后一种方法就是添加新窗口到堆栈as seen here in this SO post.

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

Another reference regarding this type of navigation.