开发中可能经常会遇到需要在TableView底部添加工具条的情况,如果直接在TableVIewController的view上添加View作为工具条,会导致滚动tableView时工具条跟随滚动。
第一种方法:开发中为了扩展性,控制器还是尽量使用UIViewController,这样直接在viewController的view上添加tableView,然后将工具条添加在view的最顶层即可。
第二种方法:但是如果之前控价已经搭建好了,控制器使用的是UITableViewController,不好再做更改时,我们可以使用UIWindow来完成任务
步骤很简单:
创建一个UIWindow对象和UIView的toolView对象,将toolView添加到新建的window中,然后调用makeKeyAndVisible显示window即可
注意:
UIWindow在显示的时候是不管KeyWindow是谁,都是Level优先的,即Level最高的始终显示在最前面,级别的高低顺序从小到大为Normal < StatusBar < Alert
关闭窗口后需要给置为nil
[self.toolWindow resignKeyWindow];
self.toolWindow = nil;-
Xcode8创建并显示window的方法在viewDidAppear方法中调用,viewDidLoad和viewWillAppear中创建完成后显示时会报以下错误:
报错(应用程序的窗口没有根控制器):Application windows are expected to have a root view controller at the end of application launch'
如果必须在viewDidLoad方法中创建并显示window时,使用以下方法调用即可
[self performSelector:@selector(createToolView) withObject:nil afterDelay:0]; // 最后参数可以设置延时多少秒调用
项目中遇到需要在TableView上使用悬浮按钮时,也可以这么搞
以下是实现代码
@interface XYTableViewController ()
@property (nonatomic, strong) UIView *toolView;
@property (nonatomic, strong) UIWindow *toolWindow;
@end
@implementation XYTableViewController
- (void)viewDidAppear:(BOOL)animated {
// 控制器的view显示完成后执行创建并显示window
[super viewDidAppear:animated];
[self createToolView];
}
- (void)createToolView { // 创建工具条
// 1.创建window
UIWindow *toolWindow = [[UIWindow alloc] initWithFrame:CGRectMake(0, [UIScreen mainScreen].bounds.size.height - 44, [UIScreen mainScreen].bounds.size.width, 44)];
// 设置window的等级
toolWindow.windowLevel = UIWindowLevelAlert + 1;
self.toolWindow = toolWindow;
// 2.创建UIView
UIView *toolView = [[UIView alloc] init];
toolView.backgroundColor = [UIColor blueColor];
toolView.frame = toolWindow.bounds;
self.toolView = toolView;
// 3.添加view到窗口
[self.toolWindow addSubview:self.toolView];
// 4.显示窗口
[self.toolWindow makeKeyAndVisible];
}