2016-05-27 83 views
1

我正試圖在labelText中查找一個字母的位置。 目標C的代碼是Swift:如何找到UILabel中某個字母的位置(x,y)?

NSRange range = [@"Good,Morning" rangeOfString:@","]; 
NSString *prefix = [@"Good,Morning" substringToIndex:range.location]; 
CGSize size = [prefix sizeWithFont:[UIFont systemFontOfSize:18]]; 
CGPoint p = CGPointMake(size.width, 0); 
NSLog(@"p.x: %f",p.x); 
NSLog(@"p.y: %f",p.y); 

請有人告訴我如何寫迅速上面的代碼?我發現計算字符串的範圍有點困難。轉換這SWIFT只是語法時

+0

[這](https://objectivec2swift.com /#/ home/converter /)是一個將Obj-C語法轉換爲Swift的有用網站 –

+1

由於是代碼語言轉換問題,我正在投票關閉此問題。 –

+0

@UmairAfzal感謝您的網站。 – iPhoneDeveloper

回答

0

真的沒什麼變化

var range: NSRange = "Good,Morning".rangeOfString(",") 
var prefix: String = "Good,Morning".substringToIndex(range.location) 
print(prefix) //Good 
1

我終於會推薦以下的變體:

extension String { 

    func characterPosition(character: Character, withFont: UIFont = UIFont.systemFontOfSize(18.0)) -> CGPoint? { 

     guard let range = self.rangeOfString(String(character)) else { 
      print("\(character) is missed") 
      return nil 
     } 

     let prefix = self.substringToIndex(range.startIndex) as NSString 
     let size = prefix.sizeWithAttributes([NSFontAttributeName: withFont]) 

     return CGPointMake(size.width, 0) 
    } 
} 

客戶端的代碼:

let str = "Good,Morning" 
let p = str.characterPosition(",") 
+0

感謝它的幫助。 – iPhoneDeveloper

+1

如果不是一條線,該怎麼辦? –

0

一個安全找到範圍的方法是使用if-let聲明自rangeOfString可能會返回nil值。通過下面的代碼去:

if let range = str.rangeOfString(",") { 
    let prefix = str.substringToIndex(range.startIndex) 
    let size: CGSize = prefix.sizeWithAttributes([NSFontAttributeName: UIFont.systemFontOfSize(14.0)]) 
    let p = CGPointMake(size.width, 0) 
} 

以上代碼給出結果爲: enter image description here

+0

謝謝。我不會忘記使用if-let。 – iPhoneDeveloper

+0

「range.startIndex」和「range.endIndex」有什麼區別?我得到輸出爲「好」和「好」(用逗號)。 – iPhoneDeveloper

+0

@ user1512106當您使用'print(range)'在上面的代碼中打印範圍的值時,您得到的值爲** 4 .. <5 **。這裏'range.startIndex'是_4_,'range.endIndex'是_5_。而且你讀到它就像**範圍從4到5,但不包括5 **。你可以在這裏找到更多關於範圍運算符的信息(https://developer.apple.com/library/ios/documentation/Swift/Conceptual/Swift_Programming_Language/BasicOperators.html#//apple_ref/doc/uid/TP40014097-CH6- ID73)。 –

1

試試這個代碼::

let range : NSRange = "Good,Morning".rangeOfString(","); 
let prefix: NSString = "Good,Morning".substringToIndex(range.location); 
let size: CGSize = prefix.sizeWithAttributes([NSFontAttributeName: UIFont.systemFontOfSize(18.0)]) 
let p : CGPoint = CGPointMake(size.width, 0); 
NSLog("p.x: %f",p.x) 
NSLog("p.y: %f",p.y) 
相關問題