Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/objective-c/26.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Objective c 设置NSDatePicker委托_Objective C_Cocoa_Macos_Nsdatepicker - Fatal编程技术网

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