2

Hi I am trying to find a character's CGRect from a Label. I found following How do I locate the CGRect for a substring of text in a UILabel? to be useful but the code is in Objective C. I tried into Swift language. Following in the Swift conversion of the Objective C code

var objLabel:UILabel = UILabel()

func getBoundingRectForCharacterRange(range:NSRange) -> CGRect {

    var objTextStorage = NSTextStorage(attributedString: objLabel.attributedText!)
    var objLayoutManager = NSLayoutManager()
    objTextStorage.addLayoutManager(objLayoutManager)

    var objTextContainer = NSTextContainer(size: CGSizeMake(100,100))
    objTextContainer.lineFragmentPadding = 0
    objLayoutManager.addTextContainer(objTextContainer)

    var objRange:NSRange!

    objLayoutManager.characterRangeForGlyphRange(range, actualGlyphRange: objRange)
    return objLayoutManager.boundingRectForGlyphRange(objRange, inTextContainer: objTextContainer)
}

I am facing following error saying

can not convert value of type 'NSRange!' to expected argument type 'NSRangePointer' (aka 'UnsafeMutablePointer<_NSRange>')

Kindly help me to solve the problem.

Also I tried following from one similar question's answer but its also not working

var range : NSRange?
doSomethingWithRangePointer(&range)

func doSomethingWithRangePointer(range : UnsafeMutablePointer<NSRange?>) {
    // Do stuff
}
Community
  • 1
  • 1
HarshIT
  • 4,583
  • 2
  • 30
  • 60
  • Kindly confirm that you are also working in latest Swift version as me. I use Swift 2.2 with Xcode 7.2 – HarshIT Jan 08 '16 at 12:43

1 Answers1

-1

Change the call to objLayoutManager.characterRangeForGlyphRange() as follows:

objLayoutManager.characterRangeForGlyphRange(range, 
  actualGlyphRange: &objRange)
Duncan C
  • 128,072
  • 22
  • 173
  • 272