3

がありNSDatePicker (NSDatePicker* datePicker)、そのデリゲートをメイン アプリケーション ( self) として設定します。以下のようにプログラムしました。

  1. datePicker をselfデリゲートにする

    [[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 : この委任の何が問題になっていますか? ターゲット/アクションメソッドは正常に機能します。
  • Q : NSDatePicker でサポートされている委任方法について、どのドキュメントを使用できますか?
4

4 に答える 4

3

このメソッドをコードに追加する必要があります:

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

IB から DatePickerCell を選択し、右クリックしてデリゲート エントリを [ファイルの所有者] ボックスにドラッグします。

于 2013-10-10T12:29:20.667 に答える
2

NSDatePicker の委任が予期しない動作をする。NSDatePicker のデリゲートになるということは、NSDatePicker の親クラスである NSControl から通知イベントを受け取ることを意味すると思うかもしれません。

しかし、そうではありません。デリゲートは NSDatePicker のセルに設定されるため、デリゲート クラスはコントロールではなくセルからイベントを受け取ります (NSDatePickerCellDelegate プロトコルに準拠)。これらのセル デリゲート メソッドのうち、検証メソッドは 1 つだけです。

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 に答える