加入收藏 | 设为首页 | 会员中心 | 我要投稿 李大同 (https://www.lidatong.com.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 百科 > 正文

objective-c – 如何接受编辑和解除包含自定义视图的弹出菜单?

发布时间:2020-12-16 03:06:24 所属栏目:百科 来源:网络整理
导读:我想添加在表视图中编辑特定列时使用日期选择器的功能,并使用 here中的代码片段,该代码片段运行良好.然而,NSDatePicker不适合我的需要,所以我使用自己的自定义视图,使用IB创建并通过NSViewController子类加载来编辑日期. 但是,我不知道如何以接受编辑的方式
我想添加在表视图中编辑特定列时使用日期选择器的功能,并使用 here中的代码片段,该代码片段运行良好.然而,NSDatePicker不适合我的需要,所以我使用自己的自定义视图,使用IB创建并通过NSViewController子类加载来编辑日期.

但是,我不知道如何以接受编辑的方式关闭弹出式菜单,即在userAcceptedEdit中返回YES:

BOOL userAcceptedEdit = [menu popUpMenuPositioningItem:nil
                                            atLocation:frame.origin
                                                inView:tableView];

当NSDatePicker是菜单的视图,但不是与我的自定义视图,这是正常工作.

我在自定义视图中捕获文本字段中的输入键操作,但我可以想出的是如何取消菜单跟踪,这使得userAcceptedEdit == NO:

MyCustomViewController.mm:

- (IBAction)textFieldAction:(id)sender {
    logdbg(@"Action");
    NSMenu* menu = [[self.view enclosingMenuItem] menu];
    [menu cancelTracking];
}

苹果应用程序菜单和弹出式列表编程主题的Views in Menu Items部分不包括…

编辑这是a sample project,这说明了这个问题.

有人可以提供一些指导吗?

解决方法

您还应该可以将textFields委托设置为NSViewController,在ViewController中实现NSTextFieldDelegate,并执行此操作
- (void)controlTextDidEndEditing:(NSNotification *)aNotification{
    // NSTextField * textField = [aNotification object];
    NSUInteger whyEnd = [[[aNotification userInfo] objectForKey:@"NSTextMovement"] unsignedIntValue];
    if(whyEnd == NSReturnTextMovement){
        // Create new event here using the below routine

        /*
        [[self window] keyDown: [NSEvent keyEventWithType:(NSEventType)type 
                                                 location:(NSPoint)location 
                                            modifierFlags:(NSUInteger)flags 
                                                timestamp:(NSTimeInterval)time 
                                             windowNumber:(NSInteger)windowNum 
                                                  context:(NSGraphicsContext *)context 
                                               characters:(NSString *)characters 
                              charactersIgnoringModifiers:(NSString *)unmodCharacters 
                                                isARepeat:(BOOL)repeatKey
                                                  keyCode:(unsigned short)code]
         ];
         */ 
    }
 }

在这里,您通过创建一个新事件传递给父视图,基本上将通知转换为EVENT

还应该注意到,这成为所有文本区域的中央“派遣”返回捕手.

以下是使用NSEvent创建方法的很好的链接:
http://advinprog.blogspot.com/2008/06/so-you-want-to-post-keyboard-event-in.html

注意在这个写法如何模拟一个key_down和一个key_up!

(编辑:李大同)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章
      热点阅读