• oc之mac中NSView的事件响应


    mac开发系列17:定制NSView的事件处理

    2017.08.14 11:39* 字数 399 阅读 217评论 0

    这里以鼠标左击,即mouseDown为例。

    我们通常的做法是,实现一个NSView的子类,例如mac微信中的MMView,然后在子类中重写mouseDown函数,再在mouseDown函数里面实现自己的事件处理逻辑。

    不过,有些场景需要我们在此基础上做更加灵活的定制:MMView实际上是作为公共UI控件(一般会是NSWindow或者NSView的属性/成员变量),不同NSWindow/NSView中的事件处理逻辑是不一样的,而且这样的NSWindow/NSView会随着业务需要不断增加。这就意味着,不可能在MMView的mouseDown中穷举所有的事件处理逻辑(即使可以,也不应该在公共控件中耦合过多的业务逻辑)。

    我们可以让mouseDown只负责事件捕捉以及事件传递(通过block来传递),事件处理交给具体的NSWindow/NSView来实现,代码实现如下:

    1、在MMView中定义:

    @property (nonatomic, copy) void (^mouseDownInsideBlock)(NSEvent *theEvent); // 这个block用于接受mouseDown传递过来的event

      1>(void)setMouseDownInsideBlock:(void (^)(NSEvent *))mouseDownInsideBlock; // block的set函数
      2>、MMView中的mouseDown函数捕捉事件,并通过block传递:

    (void)mouseDown:(NSEvent *)theEvent {

    if (self.mouseDownInsideBlock) {
    NSPoint aPoint = [self convertPoint:[theEvent locationInWindow] fromView:nil];
    if (!NSPointInRect(aPoint, self.bounds)) {
    return;
    }
    // Call back
    self.mouseDownInsideBlock(theEvent); // 事件传递

    } else {
    [super mouseDown:theEvent];
    }
    }
    3、NSWindow/NSView中接受mouseDown传递过来的事件,并做所需的事件处理:

    @weakify(self)
    [self.sendToFriendContainer setMouseDownInsideBlock:^(NSEvent *theEvent) {
    @strongify(self)
    [self onClickSendToFriend]; // 事件处理
    }];

     

    //注册视图的frame变换通知和对应的处理方法

        func registerNofication() {

            NotificationCenter.default.addObserver(self, selector: #selector(recieveFrameChangeNotificaiton(_:)), name: NSView.frameDidChangeNotification, object: customView)

        }

        @objc func recieveFrameChangeNotificaiton(_ notificaiton: Notification){

            let newFrame = customView.frame;

        }

  • 相关阅读:
    ASP.NET MVC WebAPI 上传图片实例
    PowerDesigner设计权限控制数据模型
    ASP.NET中使用WebService异步加载数据显示到页面
    C#+Dotnetbar海益ERP数据管理系统
    centos 6.X minimal 系列最小化安装完成后,安装mono和jexus过程小记录
    MVC3/4伪静态 jexus mvc伪静态
    petapoco 使用 MiniProfiler Glimpse监控
    尝试整理出自己的开发框架1
    初尝Brnshop移植到Linux Mono Jexus环境运行
    (转)Android开发出来的APP在手机的安装路径是?
  • 原文地址:https://www.cnblogs.com/sundaymac/p/10335450.html
Copyright © 2020-2023  润新知