gpt4 book ai didi

objective-c - 如何接受编辑和关闭包含自定义 View 的弹出菜单?

转载 作者:太空狗 更新时间:2023-10-30 03:26:42 25 4
gpt4 key购买 nike

我想添加在我的表格 View 中编辑特定列时使用日期选择器的功能,并使用了来自 here 的代码片段,效果很好。但是 NSDatePicker 不适合我的需要,所以我使用自己的自定义 View ,使用 IB 创建并通过 NSViewController 子类加载以编辑日期。

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

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

NSDatePicker 是菜单 View 时,这工作正常,但不是我的自定义 View 。

我在我的自定义 View 中捕获了文本字段中的输入键操作,但我能弄清楚的是如何取消菜单跟踪,这使得 userAcceptedEdit == NO:

MyCustomViewController.mm:

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

Views in Menu Items Apple 的 Application Menu and Pop-up List Programming Topics 部分也没有涵盖它...

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

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

最佳答案

您还应该能够将文本字段的委托(delegate)设置为 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]
];
*/
}
}

在这里,您实际上是通过创建一个新事件传递给父 View ,将通知转换为事件

还应注意,这将成为所有文本字段的中央"dispatch"返回捕获器。

这里有一个关于使用 NSEvent 创建方法的链接: http://advinprog.blogspot.com/2008/06/so-you-want-to-post-keyboard-event-in.html

请注意本文中如何模拟 key_down 和 key_up!!!

关于objective-c - 如何接受编辑和关闭包含自定义 View 的弹出菜单?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/21787372/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com