UILabel显示1k为int值1000和2k为2000,依此类推

时间:2015-09-17 07:49:39

标签: ios iphone uilabel nsnumberformatter

我有UILabel显示int值,我希望如果值为千,如1000,则标签应显示1k和2k为2000及以后。如何实现这一目标?

3 个答案:

答案 0 :(得分:6)

这个怎么样?

 .controller('myCtrl', function ($scope) {
    $scope.myLink = 'http://google.com';
    $scope.style = {};

    $scope.disableLink = function () {
      $scope.myLink = '#';
      $scope.style = {
         zIndex: '10',
         background: 'rgba(192,192,192,0.3)',
         height: '100%',
         top: '0',
         left :'0',
         right : '0',
         pointerEvents : 'none'
      }
    };

    $scope.disableLink();  //call this to disable
  });

答案 1 :(得分:0)

有两种方式,或者三种方式。

第一 您可以在设置标签中的值之前以编程方式执行此操作。

第二 您可以通过int值的setter扩展UILabel,该值用于格式化并设置相应的字符串值。

第三 您继承UILabel并为int值添加setter。这样做格式化并设置适当的字符串。 扩展工作少了一些,但是子类化允许覆盖常规setter,这样你就可以抛出异常或任何你想要的东西。

这三者有一个共同点:你必须以编程方式进行格式化。 (int除以1000,然后使用常规字符串格式)

扩展或继承UILabel使解决方案可重用。

答案 2 :(得分:0)

允许将格式数字转换为单词的扩展名-> 1.000 = 1K 1.500-> 1.5K 1.000.000-> 1M。 用法:myInt.abbreviateNumber()

extension Int {
    func abbreviateNumber() -> String {
        if self < 1000 {
            return "\(self)"
        }

        if self < 1000000 {
            var n = Double(self);
            n = Double( floor(n/100)/10 )
            return "\(n.description)K"
        }

        var n = Double(self)
        n = Double( floor(n/100000)/10 )
        return "\(n.description)M"
    }
}

来源:https://gist.github.com/Dfmarulanda/f575a7088811b6a0759a