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

前端之家收集整理的这篇文章主要介绍了objective-c – 如何接受编辑和解除包含自定义视图的弹出菜单?前端之家小编觉得挺不错的,现在分享给大家,也给大家做个参考。
我想添加在表视图中编辑特定列时使用日期选择器的功能,并使用 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!

原文链接:https://www.f2er.com/c/112513.html

猜你在找的C&C++相关文章