所以我正在使用 iOS Mapkit
,应用程序的一部分要求我在很久以前显示当有人点击它时放置的注释。到目前为止,我已经试过了:
//MARK: Report Date And Time Details
let ReportTime = NSDate()
let TimeStamp = NSDateFormatter()
TimeStamp.timeStyle = NSDateFormatterStyle.ShortStyle
TimeStamp.dateStyle = NSDateFormatterStyle.ShortStyle
TimeStamp.stringFromDate(ReportTime)
然后将注释的描述设置为Report Time
。我不想这样做,而是希望注释说“53、54、55 分钟前等”。有没有一种简单的方法可以做到这一点?
谢谢大家!
最佳答案
两件事:
要获得耗时,我建议使用
NSDateComponentsFormatter
:let formatter = NSDateComponentsFormatter() formatter.allowedUnits = [.Hour, .Minute] formatter.unitsStyle = .Full let string = formatter.stringFromDate(date1, toDate: date2)
生成的字符串如下所示:
2 hours, 1 minute
如果您只想让标注显示耗时,最简单的方法是为
title
(或subtitle
,无论你喜欢哪个)。例如:class CustomAnnotation: NSObject, MKAnnotation { let startDate = NSDate() var coordinate: CLLocationCoordinate2D var subtitle: String? init(coordinate: CLLocationCoordinate2D) { self.coordinate = coordinate super.init() } var title: String? { let formatter = NSDateComponentsFormatter() formatter.allowedUnits = [.Hour, .Minute] formatter.unitsStyle = .Full let elapsedString = formatter.stringFromDate(startDate, toDate: NSDate())! return "Added \(elapsedString) ago" } }
请注意,这里的关键是我使用的是计算属性,而不是使用
MKPointAnnotation
获得的title
的存储属性。这确保每次显示标注时,它都会重新检索属性,并且NSDateComponentsFormatter
将重新计算耗时的适当字符串表示形式。
很明显,您可以根据需要更改它(例如 startDate
是否真的只是在您创建注释时,或者它是否是您可以从数据源设置的一些存储属性;您可以更改传递附加属性的初始化器等),但这说明了基本思想。
关于ios - 如何获取注释放置 iOS 的时间,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/38516031/