NSDatePicker 更改日期方法运行两次!(mac app)
Posted
技术标签:
【中文标题】NSDatePicker 更改日期方法运行两次!(mac app)【英文标题】:NSDatePicker change date method runs twice!(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 中创建它并以图形方式连接它?那么这个问题也会出现吗?我想会很有趣。 【参考方案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)
【讨论】:
以上是关于NSDatePicker 更改日期方法运行两次!(mac app)的主要内容,如果未能解决你的问题,请参考以下文章
从 NSDatePicker 获取小时和分钟 - Swift