NSDatePicker метод изменения даты запускается дважды! (Mac App) - PullRequest
3 голосов
/ 25 мая 2011

Я просто добавляю один NSDatePicker в форму, устанавливаю графический стиль и устанавливаю действие следующим образом:

[datePicker setAction:@selector(datePickSelected:)];

в методе, он просто печатает выбранную дату.

-(void)datePickSelected:(id)sender
{
    NSLog(@"%@",[datePicker dateValue]);
}

Это работает, но запускается два раза, когда вы щелкаете по дате в этом указателе даты. Почему это?

2011-05-25 15:17:09.382 xxx[6609:a0f] 2011-05-13 15:17:04 +0800
2011-05-25 15:17:09.677 xxx[6609:a0f] 2011-05-13 15:17:04 +0800

Ответы [ 3 ]

3 голосов
/ 13 июня 2012

Сделайте это, чтобы исправить это:

- (void) awakeFromNib {
  [datePickerControl sendActionOn:NSLeftMouseDown];  
}
2 голосов
/ 10 ноября 2017

Вот решение Swift 4 с NSDatePicker внутри NSViewController:

class DatePickerVC: NSViewController{

  @IBOutlet weak var datePicker: NSDatePicker!
  var date:Date!

  override func viewDidLoad() {
    super.viewDidLoad()

    self.datePicker.target = self
    self.datePicker.action = #selector(dateSelected)

    let action = NSEvent.EventTypeMask.mouseExited
    self.datePicker.sendAction(on: action)
  }

  @objc func dateSelected(){
    print(datePicker.dateValue)
  }
}
2 голосов
/ 02 мая 2015

Первый ответ не работает для меня. Я использую это сейчас в Swift:

override func awakeFromNib() {
    self.datePicker.target = self
    self.datePicker.action = Selector("dateSelected:")
    let action = Int(NSEventMask.MouseExitedMask.rawValue)
    self.datePicker.sendActionOn(action)
}

(Но это немного странно, теперь действие вызывается для mouseDown вместо mouseUp, но для меня это не имеет значения ...)

...