美文网首页
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