Objective c 设置NSDatePicker委托
我有一个Objective c 设置NSDatePicker委托,objective-c,cocoa,macos,nsdatepicker,Objective C,Cocoa,Macos,Nsdatepicker,我有一个NSDatePicker(NSDatePicker*datePicker),并将其委托设置为主应用程序(self)。我编程如下 使selfdatePicker委托 [[datePicker cell]setDelegate:self] 设置单击控件时要调用的datePickerAction: [datePicker设置操作:@selector(datePickerAction:)] 这就是方法 - (IBAction)datePickerAction:(id)sender {
NSDatePicker(NSDatePicker*datePicker)
,并将其委托设置为主应用程序(self
)。我编程如下
self
datePicker委托
[[datePicker cell]setDelegate:self]代码>
datePickerAction:
[datePicker设置操作:@selector(datePickerAction:)]代码>
- (IBAction)datePickerAction:(id)sender
{
if( [[[NSApplication sharedApplication] currentEvent] modifierFlags] &
NSShiftKeyMask )
NSLog(@"shift pressed %@", [datePicker dateValue]);
else
NSLog(@"hello %@", [datePicker dateValue]);
}
问题是,当我单击NSDatePicker日历中的日期时,委派似乎不起作用
- 问:这个代表团有什么问题?这种方法效果很好
- 问:对于NSDatePicker支持的委托方法,我可以使用什么文档
NSDatePicker
本身的委托,而不是其单元格:
[datePicker setDelegate:self]
NSDatePicker的委派行为异常。有人可能会认为,成为NSDatePicker的委托意味着您将从NSControl(NSDatePicker的父类)接收通知事件
但事实并非如此。委托是在NSDatePicker的单元格上设置的,因此您的委托类将从单元格(符合NSDatePickerCellDelegate协议)而不是控件接收事件。这些单元格委托方法中只有一种是验证方法
您可以跳过将NSDatePicker子类化并使委托发生在控件上的圈套,但随后将丢失验证委托,视图层次结构的其他部分似乎依赖于此。我怀疑目标/操作方法或使用绑定是在这种情况下拦截用户交互的唯一方法。您必须将此方法添加到代码中:
- (void)datePickerCell:(NSDatePickerCell *)aDatePickerCell validateProposedDateValue:(NSDate **)proposedDateValue timeInterval:(NSTimeInterval *)proposedTimeInterval
{
NSString *aDate = [myDateFormat stringFromDate:*proposedDateValue];
}
从IB中,选择DatePickerCell,右键单击,将委托条目拖动到文件的所有者框。您需要将NSDatePicker子类化并覆盖MouseDown事件,并将其连接到委托。这是密码 CustomDatePick.h
#import <Cocoa/Cocoa.h>
@protocol CustomPickerDelegate
- (void)didPickerClick;
@end
@interface CustomDatePicker : NSDatePicker
@property (assign) id <CustomPickerDelegate> myDelegate;
@end
#import "CustomDatePicker.h"
@implementation CustomDatePicker
- (void)mouseDown:(NSEvent *)event {
[super mouseDown:event];
[self.myDelegate didPickerClick];
}
@end