MacOS 开发, 多窗口协作.

最近在写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和数据的操作.

这样子的窗口管理 一般情况 可放在一些经常会出现的 并且不需要销毁的界面中, 比如用户的偏好设置.

你可能感兴趣的:(MacOS 开发, 多窗口协作.)