ios - 如何获取注释放置 iOS 的时间

标签 ios swift nsdate nsdateformatter

所以我正在使用 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 分钟前等”。有没有一种简单的方法可以做到这一点?

谢谢大家!

最佳答案

两件事:

  1. 要获得耗时,我建议使用 NSDateComponentsFormatter:

    let formatter = NSDateComponentsFormatter()
    formatter.allowedUnits = [.Hour, .Minute]
    formatter.unitsStyle = .Full
    
    let string = formatter.stringFromDate(date1, toDate: date2)
    

    生成的字符串如下所示:

    2 hours, 1 minute

  2. 如果您只想让标注显示耗时,最简单的方法是为 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 是否真的只是在您创建注释时,或者它是否是您可以从数据源设置的一些存储属性;您可以更改传递附加属性的初始化器等),但这说明了基本思想。

enter image description here

关于ios - 如何获取注释放置 iOS 的时间,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/38516031/

相关文章:

ios - 如何将长整数时间转换为NSString或NSDate来显示时间?

ios - 应用程序在 Xcode 中启动(和工作)正常,但在 TestFlight 和 Ad-Ho 中崩溃

ios - 将数据字符串转换为 UTF8 时出现问题

swift - 如何在不转换为 Swift 中的 String 的情况下拆分或迭代 Int

ios - 快速用户通知 : why is nextTriggerDate nil?

ios - 将字符串转换为日期仅在下午时间返回 nil

ios - 在 iPad 上保存文本文件的位置

ios - iOS 上 MeCab 日语分词器的选项?

objective-c - NSURLConnection 委托(delegate)方法未被调用

ios - 覆盖核心数据值