【问题标题】:NSDatePicker change date method runs twice!(mac app)NSDatePicker 更改日期方法运行两次!(mac app)
【发布时间】:2011-05-25 07:23:19
【问题描述】:

我只是在表单中添加一个 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

【问题讨论】:

  • 我遇到了完全相同的问题。不知道是什么原因造成的。
  • 请问您为什么不在 IB 中创建它并以图形方式连接它?那么这个问题也会出现吗?我想会很有趣。

标签: objective-c xcode cocoa nsdatepicker


【解决方案1】:

这样做可以解决这个问题:

- (void) awakeFromNib {
  [datePickerControl sendActionOn:NSLeftMouseDown];  
}

【讨论】:

  • NSLeftMouseDown 在 10.12 中已弃用。应该使用这个[datePicker sendActionOn: NSEventMaskLeftMouseDown];
【解决方案2】:

第一个答案对我不起作用。我现在在 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 上调用的,不过现在对我来说已经无所谓了……)

【讨论】:

    【解决方案3】:

    这是一个 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)
      }
    }
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2015-05-23
      • 1970-01-01
      • 2018-04-06
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多