這是一個有趣的場景。我有以下的文本從服務器發送:是否有可能在UILabel/UITextView中添加一個UIButton?
我去上學#選項#
在iOS應用中,我必須把它轉換成:
我去上學[UIButton]
挑戰是測量以前的文字(「我去上學」)的長度,以設置位置(origin
)的UIButton
。這個問題將產生更多的問題,當UILabel
有多條線路,以及UIButton
多個外觀,如:
我去上學#選項#。 Lorem ipsum dolor坐在amet,consectetur adipiscing elit。 Phase f f,,mass mass mass mass,,,,el el el el el el el el el el el el el el cus cus cus cus cus cus cus cus cus cus主演mi tellus,在主播中擔任主持人,auctor laoreet愛神。 #選項# Quisque rhoncus ac mauris ac interdum。 Etiam aodio augue。 Mauris porttitor purus ac maximus faucibus。 Suspendisse velit felis,varius lobortis turpis venenatis,tempor placerat magna。在semper justo,ut pretium nunc中的整數。 Aliquam laoreet vehicula finibus。 #選項#
下面是我的一些解決方案,我能想到的:
方法1
NSString * testText = @"demo title";
CGSize stringSize = [testText sizeWithAttributes:@{NSFontAttributeName: [UIFont systemFontOfSize:17.0f]}];
這種方法可以測量單個文本行的大小,但對於多行文本,CGSize
將不正確。
方法2
NSTextStorage *textStorage = [[NSTextStorage alloc] initWithString:@"hello"];
NSLayoutManager *layoutManager = [[NSLayoutManager alloc] init];
NSTextContainer *textContainer = [[NSTextContainer alloc] init];
[layoutManager addTextContainer:textContainer];
[textStorage addLayoutManager:layoutManager];
//Figure out the bounding rectangle
NSRect stringRect = [layoutManager boundingRectForGlyphRange:NSMakeRange(0, [layoutManager numberOfGlyphs]) inTextContainer:textContainer];
這要複雜得多。 (仍然搞清楚如何建立佈局)
我的問題是:任何更簡單的方法來實現我的目標?
請參閱http://stackoverflow.com/questions/21629784/make-a-clickable-link-in-an-nsattributedstring-for-a-uitextfield-or-uilabel瞭解一些想法。 – rmaddy
很多想法都很好。謝謝。 – Raptor
你真的需要在那裏放置一個UIButton嗎?如果您需要執行任何自定義操作,則可以使用屬性字符串打開具有自定義URL方案的URL,然後讓您的應用程序處理它。這會不會更順暢,更高效? –