我的朋友帮我解决了这个问题
这是解决方案:
在 AppDelegate 我创建了UIWindow
属性:
//AppDelegate.h
@property (nonatomic, strong) UIWindow *loginWindow;
应用程序启动时初始化它
//AppDelegate.m
- (BOOL)application:(UIApplication *)application didFinishLaunchingWithOptions:(NSDictionary *)launchOptions {
....
self.loginWindow = [[UIWindow alloc] init];
self.loginWindow.windowLevel = UIWindowLevelStatusBar;
self.loginWindow.frame = [[UIScreen mainScreen] bounds];
self.loginWindow.backgroundColor = [UIColor clearColor];
....
return YES;
}
然后,在 loginVC 中:
@interface loginVC ()
@property (nonatomic, weak) UIWindow *loginWindow;
@end
@implementation
....
- (void)show {
// setting up loginVC view
if (!self.loginWindow) {
self.loginWindow = [[AppDelegate sharedDelegate] loginWindow];
}
if (![self.loginWindow.rootViewController isEqual:self]) {
[self.loginWindow setRootViewController:self];
}
self.loginWindow.hidden = NO;
//UPD:
//[self.loginWindow makeKeyAndVisible];
//UPD2:
[self.loginWindow makeKeyWindow];
}
- (void)hide {
// hiding view and stuff
[[[AppDelegate sharedDelegate] loginWindow] setHidden:YES];
//UPD:
//[[[AppDelegate sharedDelegate] window] makeKeyAndVisible];
//UPD2:
[[[AppDelegate sharedDelegate] window] makeKeyWindow];
}
@end
升级版:
不需要使用makeKeyAndVisible
UIWindow 的方法,第二个窗口总是在第一个窗口之上。
UPD2:
再次更新我的答案,也许它对某人有用。
没有makeKeyAndVisible
我就不能使用UITestField
s 所以我取消注释该代码并面临另一个问题:
我有UIViewController
,在这个控制器内创建另一个实例UIViewController
并调用[self presentViewController:...]
。在介绍中UIViewController
我正在创建loginVC
,但是当我打电话时
[[[AppDelegate sharedDelegate] window] makeKeyAndVisible];
呈现的 viewController 消失了,但是第一个视图控制器仍然有这个控制器presentedViewController
,所以我不能呈现其他视图控制器。
我的解决方案是更改makeKeyAndVisible
.makeKeyWindow