addSubview方法是否实际将视图加载到应用程序中?我问的原因是因为我的申请中有两个两个观点.应用程序委托将两个视图添加为子视图,然后预先显示其中一个视图.现在,我在每个视图的每个viewDidLoad方法中都有一个print语句.当我运行应用程序时,应用程序委托将视图作为子视图加载,并且在加载每个视图时,我实际上看到控制台打印出我在每个viewDidLoad方法中放置的语句.这应该是这样做的吗?
有人可以确认我在任何时候任何iPhone应用程序中只能有一个UIWindow实例吗?
更新: 我在此链接中找到了以下信息。据此,可以有许多窗口。
另外,UIApplication对象维护了当前在应用程序中打开的所有窗口的列表(UIWindow对象),因此通过这些窗口,它可以检索应用程序的任何UIView对象。
我会问你在ios上查看标志的最佳做法是什么.只有在获取这些文本字段后,才能启动应用程序内容.我有两个窗户吗?Apple建议仅使用两个窗口进行外部显示.如果这是一个好习惯,我该如何构建它?
提前致谢.
我在AppDelegate类中创建了一个TabBar VC,通过[[UIScreen mainScreen] bounds]设置窗口框架.由于我显示状态栏,因此高度应为460,但它似乎为480.如果我手动将高度设置为460,则会在标签的底部切断触摸识别.下面是代码
- (BOOL)application:(UIApplication *)application didFinishLaunchingWithOptions:(NSDictionary *)launchOptions
{
UIColor *brownNavBarColor = [[UIColor alloc] initWithRed:0.78f green:0.56f blue:0.06f alpha:1.0f];
[application setStatusBarHidden:NO];
CGRect windowRect = [[UIScreen mainScreen] bounds];
self.window = [[UIWindow alloc] initWithFrame:windowRect];
CGRect appFrame = [[UIScreen mainScreen] applicationFrame];
NSLog(@" appFrame %f", appFrame.origin.y);
NSLog(@" appFrame %f", appFrame.size.height);
NSLog(@" window.frame %f", self.window.frame.origin.y);
NSLog(@" window.frame %f", self.window.frame.size.height);
NSLog(@" window.bounds %f", self.window.bounds.origin.y);
NSLog(@" window.bounds %f", self.window.bounds.size.height);
[self.window makeKeyAndVisible];
self.ingredientTabVC2 = [[NewIngredientViewController alloc] initWithNibName:nil bundle:NULL];
self.ingredientNC2 = [[UINavigationController alloc] initWithRootViewController:self.ingredientTabVC2];
[self.ingredientNC2.navigationBar setTintColor:brownNavBarColor];
self.ingredientTabVC3 = [[IngredientTabViewController …Run Code Online (Sandbox Code Playgroud) 在 App 委托中,可以设置应用程序的UIWindow颜色,如代码所示。
但是,当尝试在 中将应用程序的UIWindow颜色设置为不同的颜色时ViewController,例如调用 将self.window?.backgroundColor = UIColor.blueColor()被忽略。不会发生错误,但也不会发生颜色变化。
题:
1 - 在ViewController? 中调用应用程序时如何设置应用程序的窗口颜色?注意:我不是要更改视图背景颜色,而是要更改视图UIWindow后面的颜色。
class AppDelegate: UIResponder, UIApplicationDelegate {
var window: UIWindow?
func application(application: UIApplication, didFinishLaunchingWithOptions launchOptions: [NSObject: AnyObject]?) -> Bool {
self.window?.backgroundColor = UIColor.redColor()
return true
}
}
Run Code Online (Sandbox Code Playgroud) 在我的应用程序的故事板中有一个UIViewController(子),它加载到另一个UIViewController(父)中.
这是我在父视图控制器中使用的代码,用于在父视图控制器(包括导航栏)中的所有子视图上加载子视图控制器.
let window: UIView? = UIApplication.sharedApplication().keyWindow;
let storyboard: UIStoryboard = UIStoryboard(name: "Main", bundle: nil);
let viewController: UIViewController = storyboard.instantiateViewControllerWithIdentifier("CPBackConfirmMessageUIView");
window?.addSubview(viewController.view);
Run Code Online (Sandbox Code Playgroud)
这就是他们在我的故事板中的样子
这是它在旁边父视图中加载子视图控制器的方式
在子视图控制器内部,您可以看到两个按钮.我已将(TouchUpInside)操作添加到子视图的控制器类中的那些按钮,但它无法正常工作.但ViewDidLoad方法工作正常(我添加了一些动画,他们正在工作).
有人能告诉我如何在这些按钮上写动作并让它们工作或让我知道我是否在这里做错了什么.任何帮助将受到高度赞赏.
编辑: 这就是我写IBAction的方式
@IBAction func abc(sender: AnyObject) {
print("Worked");
}
Run Code Online (Sandbox Code Playgroud) 我有一个以模态方式呈现视图控制器的应用程序,我在不同的 UIWindows 中有一个标准的 ViewController 和一个 UIAlertController,主窗口具有正常的 UIWindowLevel 优先级,警报窗口具有 Alert UIWindowLevel 优先级,因为我希望始终将警报放在任何 ViewController 之上我在主 UIWindow 上以模态呈现(AppDelegates 参考)。我还有另一个具有状态栏优先级的 UIWindow,当我希望确保在所有内容之上都有一个不同的 ViewController 时。因此,当我使用 Alert UIWIndowLevel 优先级显示 UIWindow 并且在显示具有状态栏 UIWIndowLevel 的不同窗口之后,警报窗口中的警报显示在状态栏窗口的顶部。有什么原因吗?
我正在使用此代码
UIWindow *window = [[UIApplication sharedApplication].windows objectAtIndex:0];
UIView * videoView = [[window subviews] lastObject];
[videoView addSubview:viewFullScreenToolbar];
Run Code Online (Sandbox Code Playgroud)
在最顶层视图上添加视图以在全屏播放视频.按下全屏按钮时,此代码将执行并显示全屏视频.但是当全屏关闭然后再次按下时,尽管视频在全屏播放正确,但viewFullScreenToolbar仍然不可见.此外,问题仅在横向模式下,在纵向模式下效果很好.
我只是想UIWindow暂时将我置于状态栏上方以达到警示目的.
代码很简单:
let newwindow = UIWindow(frame: UIScreen.mainScreen().bounds)
newwindow.hidden = false
newwindow.backgroundColor = UIColor.greenColor()
newwindow.windowLevel = UIWindowLevelStatusBar + 1.0
newwindow.makeKeyAndVisible()
newwindow.hidden = false
Run Code Online (Sandbox Code Playgroud)
但是,当我把它放在viewDidAppear我的根视图控制器中时,我从未看到过这个窗口.
我究竟做错了什么?
这是我的简单按钮操作,用于显示 XIB 文件,该文件实际上是 Objective-C 中的条形码扫描仪。
- (IBAction)startCamera:(id)sender {
BarcodeVC * controller = [[BarcodeVC alloc] initWithNibName:@"BarcodeVC" bundle:[NSBundle mainBundle]];
//[self presentViewController:controller animated:YES completion:nil];
UIWindow * currentwindow = [[UIApplication sharedApplication] keyWindow];
[currentwindow.rootViewController presentViewController:controller animated:YES completion:nil];
}
Run Code Online (Sandbox Code Playgroud)
但不幸的是,一个警告来了:
keyWindow已弃用:首先在 iOS 13.0 中弃用
我知道iOS 13支持多场景,但是Objective-C有没有办法解决这个问题?我见过 Swift 版本,但使用 Objective-C 却没有成功。
uiwindow ×10
ios ×8
iphone ×3
objective-c ×3
swift ×3
cocoa-touch ×2
uiview ×2
appdelegate ×1
ios13 ×1
ios9 ×1
uibutton ×1
viewdidload ×1