美文网首页
MacOS 开发, 多窗口协作.

MacOS 开发, 多窗口协作.

作者: 包砸豆沙馅 | 来源:发表于2020-03-22 23:23 被阅读0次
最近在写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 开发, 多窗口协作.

      本文链接:https://www.haomeiwen.com/subject/dnvbyhtx.html