欢迎您访问程序员文章站本站旨在为大家提供分享程序员计算机编程知识!
您现在的位置是: 首页  >  移动技术

iOS中关于UIWindow和statusbar的设置问题

程序员文章站 2023-12-20 16:55:04
最近在做开发时要做一个类似于uialertview的控件,做法是创建一个基于uiview的类,在里面进行自定义控件的设置,为了尽量模仿uialertview,在这个类里面创...

最近在做开发时要做一个类似于uialertview的控件,做法是创建一个基于uiview的类,在里面进行自定义控件的设置,为了尽量模仿uialertview,在这个类里面创建了一个新的uiwindow并将self显示到这个window上。

由于app中statusbar中的内容为白色的,新创建的window就会改变statusbar的状态,不能得到我们想要的结果,为了避开一系列其他错误,设置statusbar的颜色时采用

- (uistatusbarstyle)preferredstatusbarstyle​
- (void)setneedsstatusbarappearanceupdate​

这两个方法,你没看错,这两个方法是uiviewcontroller的方法,那么跟uiview有什么关系呢,不错,这里我们是想给uiwindow设置rootviewcontroller,在这个rootviewcontroller中写这两个方法并做一些其他的设置,这样控件能显示在rootviewcontroller中,statusbar也是我们想要的状态。

上代码(demo部分代码):

// testview.h
#import
@interface testview : uiview
@property (nonatomic, strong) nsstring *clicktitle;​
- (void)show;
@end
// testview.m
​#import "testview.h"
@implementation testview
{
  uiwindow *window;
  uibutton *clickbtn;
}
- (void)makewindow
{
  window = [[uiwindow alloc] init];
  window.windowlevel = uiwindowlevelstatusbar + 1;
  window.backgroundcolor = [uicolor clearcolor];
  [window makekeyandvisible];
  testvc *rootvc = [[testvcalloc] init];
  rootvc.view.backgroundcolor = [uicolorcolorwithred:0green:0blue:0alpha:0.5];
  uinavigationcontroller *navi = [[uinavigationcontrolleralloc]initwithrootviewcontroller:rootvc];
  window.rootviewcontroller = navi;
  navi.navigationbarhidden = yes;
  self.frame = cgrectmake(0, 0, window.frame.size.width - 40, 80);
  self.center = window.center;
  [rootvc.view addsubview:self];
}
- (instancetype)initwithframe:(cgrect)frame
{
  if (self = [super initwithframe:frame]) {
    clickbtn = [uibutton buttonwithtype:uibuttontypecustom];
  }
  returnself;
}
- (nsstring *)clicktitle
{
  if (!_clicktitle) {
    _clicktitle = @"clicks";
  }
  return_clicktitle;
}
- (void)show
{
  [clickbtn settitle:self.clicktitleforstate:uicontrolstatenormal];
  [selfmakewindow];
}
// testvc.m
#import "testvc.h"
@interfacetestvc ()
@end
@implementation testvc
- (void)viewdidload {
  [super viewdidload];
  // do any additional setup after loading the view.
  [self setneedsstatusbarappearanceupdate];
}
- (uistatusbarstyle)preferredstatusbarstyle
{
  return uistatusbarstylelightcontent;
}

​代码很简单,却是我为了达到这一效果想了很久,感觉会有更简单的办法,以后继续研究。

以上所述是小编给大家介绍的ios中关于uiwindow和statusbar的设置问题,希望对大家有所帮助

上一篇:

下一篇: