3

我有一个NSDatePicker (NSDatePicker* datePicker), 并将其委托设置为主应用程序 ( self)。我编程如下。

  1. 使selfdatePicker 委托

    [[datePicker cell] setDelegate:self];

  2. 设置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 日历中的日期时,委派似乎不起作用。

在此处输入图像描述

  • 问:这个代表团怎么了?目标/行动方法工作正常。
  • Q : NSDatePicker 支持哪种委托方法可以使用什么文档?
4

4 回答 4

3

您必须将此方法添加到您的代码中:

- (void)datePickerCell:(NSDatePickerCell *)aDatePickerCell validateProposedDateValue:(NSDate **)proposedDateValue timeInterval:(NSTimeInterval *)proposedTimeInterval
{
   NSString *aDate = [myDateFormat stringFromDate:*proposedDateValue];
}

从 IB 中,选择 DatePickerCell,右键单击,将委托条目拖到 File's Owner 框。

于 2013-10-10T12:29:20.667 回答
2

NSDatePicker 的委派行为异常。有人可能会认为,成为 NSDatePicker 的代表意味着您将收到来自 NSDatePicker 的父类 NSControl 的通知事件。

但是,情况并非如此。委托设置在 NSDatePicker 的单元格上,因此您的委托类将接收来自单元格的事件(符合 NSDatePickerCellDelegate 协议),而不是控件。这些单元格委托方法中只有一个,即验证方法。

您可以跳过将 NSDatePicker 子类化并让委托发生在控件上的麻烦,但随后您将失去验证委托,视图层次结构的其他部分似乎依赖于该验证委托。我怀疑目标/操作方法或使用绑定是在这种情况下拦截用户交互的唯一方法。

于 2011-06-03T21:43:52.923 回答
0

您需要继承 NSDatePicker 并覆盖 MouseDown 事件并将其连接到委托。这是代码。

CustomDatePick.h

#import <Cocoa/Cocoa.h>

@protocol CustomPickerDelegate

- (void)didPickerClick;

@end

@interface CustomDatePicker : NSDatePicker

@property (assign) id <CustomPickerDelegate> myDelegate;

@end

CustomDatePick.m

#import "CustomDatePicker.h"

@implementation CustomDatePicker

- (void)mouseDown:(NSEvent *)event {
    [super mouseDown:event];

    [self.myDelegate didPickerClick];
}

@end
于 2016-09-03T04:40:24.580 回答
-4

设置自身的委托NSDatePicker而不是其单元格:

[datePicker setDelegate:self]

于 2011-03-15T01:02:44.140 回答