我有一个NSDatePicker (NSDatePicker* datePicker),并将它的委托设置为主应用程序(self)。我的程序如下。
self datePicker委托单击控件时调用[[datePicker cell] setDelegate:self];
datePickerAction:。[datePicker setAction:@selector(datePickerAction:)];
这就是方法。
- (IBAction)datePickerAction:(id)sender
{
if( [[[NSApplication sharedApplication] currentEvent] modifierFlags] &
NSShiftKeyMask )
NSLog(@"shift pressed %@", [datePicker dateValue]);
else
NSLog(@"hello %@", [datePicker dateValue]);
}问题是,当我单击NSDatePicker日历中的日期时,委托似乎不起作用。

target/action方法工作得很好。
发布于 2013-10-10 12:29:20
必须将此方法添加到代码中:
- (void)datePickerCell:(NSDatePickerCell *)aDatePickerCell validateProposedDateValue:(NSDate **)proposedDateValue timeInterval:(NSTimeInterval *)proposedTimeInterval
{
NSString *aDate = [myDateFormat stringFromDate:*proposedDateValue];
}从IB中,选择DatePickerCell,右键单击,将委托条目拖到文件所有者框中。
发布于 2011-06-03 21:43:52
对于NSDatePicker,委托行为出乎意料。有人可能认为,成为NSDatePicker的委托意味着您将从NSDatePicker的父类NSControl接收通知事件。
但事实并非如此。委托是在NSDatePicker的单元上设置的,因此委托类将接收来自单元的事件(符合NSDatePickerCellDelegate协议),而不是控件。只有其中一种单元格委托方法,即验证方法。
您可以跳过循环子类NSDatePicker并使委托发生在控件上,但随后就失去了验证委托,而视图层次结构的其他部分似乎依赖于验证委托。在这种情况下,我怀疑目标/操作方法,或者使用绑定,是拦截用户交互的唯一方法。
发布于 2016-09-03 04:40:24
您需要子类NSDatePicker和重写MouseDown事件,并将其连接到委托。这是密码。
CustomDatePick.h
#import <Cocoa/Cocoa.h>
@protocol CustomPickerDelegate
- (void)didPickerClick;
@end
@interface CustomDatePicker : NSDatePicker
@property (assign) id <CustomPickerDelegate> myDelegate;
@endCustomDatePick.m
#import "CustomDatePicker.h"
@implementation CustomDatePicker
- (void)mouseDown:(NSEvent *)event {
[super mouseDown:event];
[self.myDelegate didPickerClick];
}
@endhttps://stackoverflow.com/questions/5305423
复制相似问题