最近在写macOS中, 文件上传的窗口. 涉及到阿里云上传和Http的post 上传, 这两种方式暂时不表, 想要说的是 关于窗口的持久化. 之前的做法是用户点击上传按钮, 创建出上传的窗口, 并发起上传服务, 将窗口orderFront显示(不想用模态方式, 感觉交互太生硬.) 用户等待上传的服务走完, 接着进行下一步操作.
但是问题来了, 如果用户在上传期间, 不想一直等待, 而且点击keyWindow做其他操作, 若在keyWindow点击了上传按钮, 那么就会触发多次的上传服务, 导致上传出错.
那么我现在的想法是 如果不使用模态的方式, 就要屏蔽掉用户点击keyWindow中的按钮操作. 怎么做呢?
首先 要将上传窗口持久化, 使其一直保存在内存中:
/// 上传window
@property (nonatomic, strong) UploadWindow * uploadWindow;
暂时放在appdelegate 中保存.
- (void)applicationDidFinishLaunching:(NSNotification *)aNotification {
// 创建全局的window
self.uploadWindow = [self createUploadWindow];
}
/// 创建uploadWindow
- (UploadWindow *)createUploadWindow {
UploadWindow * uploadWindow = [[[NSView alloc] init] loadNibWithNibName:NSStringFromClass([UploadWindow class]) class:NSStringFromClass([UploadWindow class])];
[uploadWindow orderOut:nil];
return uploadWindow;
}
然后在点击上传时 判断 当前上传任务是否完成, 如果没有完成:
UploadWindow * uploadWindow = appDelegate.uploadWindow;
[uploadWindow center];
[uploadWindow orderFront: nil];
如果已经完成, 表明这是一个新的上传任务:
UploadWindow * uploadWindow = appDelegate.uploadWindow;
[uploadWindow center];
[uploadWindow orderFrontReset]; /// 自定义函数, 来进行uploadWindow重置UI和数据的操作.
这样子的窗口管理 一般情况 可放在一些经常会出现的 并且不需要销毁的界面中, 比如用户的偏好设置.
网友评论