2014-09-19 74 views
0

我有一個UITextView用戶輸入數據。我有一個格式欄,下面有 粗體,斜體,下劃線和其他選項,如對齊方式等 經過大量的搜索和測試後,我才知道NSString不支持這種粗體,斜體樣式而應該使用NSAttributedString我使用NSAttributedString我無法使所選文本同時爲粗體和斜體。使用UITextView的文本格式化

我的代碼是這樣的

NSMutableAttributedString *textViewText = [[NSMutableAttributedString alloc]initWithAttributedString:textView.attributedText]; 

NSMutableAttributedString *attributedText = [[NSMutableAttributedString alloc] initWithString:text]; 

NSMutableDictionary *dict = [[NSMutableDictionary alloc] init]; 

    if(textBoldBtn){ 

     UIFont *boldFont = [UIFont boldSystemFontOfSize:textView.font.pointSize]; 
     NSDictionary *boldAttr = [NSDictionary dictionaryWithObject:boldFont forKey:NSFontAttributeName]; 

     [dict addEntriesFromDictionary:boldAttr];   
    } 
    if(textItalicBtn){ 

     UIFont *italicFont = [UIFont italicSystemFontOfSize:textView.font.pointSize]; 

     NSDictionary *italicAttr = [NSDictionary dictionaryWithObject:italicFont forKey:NSFontAttributeName]; 
     [dict addEntriesFromDictionary:italicAttr]; 
    } 
    attributedText = [[NSMutableAttributedString alloc] initWithString:text attributes:dict];  
    [textViewText appendAttributedString:attributedText]; 
    textView.attributedText = textViewText; 

    return true; 
} 

使用這種技術時,按下兩個按鈕,只需要最後的字體在字典。

我已經通過堆棧溢出的鏈接,他們使用fontDescription的Label來使文本都斜體和粗體,但請注意我不想使用任何標籤。我正在使用UITextView。我也經歷了 [textView setAllowsEditingTextAttributes:YES]; 但我想要我自己的功能。我也看到了幾個EGOTextView文本編輯對於iOS,但我嚴格希望爲iPad。我只想使用UITextView

請告訴我們是否有任何方法使用屬性字符串來使文本同時以斜體粗體和下劃線或任何方式來定製textView個人EditingTextAttributes功能的功能。

在此先感謝。

*應用程序必須上傳到應用程序商店,因此不需要任何私人框架,因爲它們會導致應用程序拒絕。

回答

0

你有一些問題。

第一個:
屬性是一個NSDictionary。這意味着鍵/值的作品,而關鍵是獨一無二的!
所以,當你使用addEntriesFromDictionary:時,醫生說:

如果兩個字典包含相同的密鑰,接收字典的 該鍵以前的值對象發送釋放消息, 新的值對象需要它的地方。

而當你想在你的代碼應用粗體和斜體效果,你認爲你有:

鍵 - 值
NSFontAttributeName - theBoldFont
NSFontAttributeName - theItalicFont

您將粗體字替換爲斜體。

二:
由於粗體和斜體是UIFont「隱藏」屬性的一個,如果你想申請兩個效果,你必須找到一種字體是斜體和大膽。那爲什麼,強調(NSUnderlineAttributeName)可以添加,而不會遇到大膽和斜體的問題。
你可以看看there瞭解如何處理它。 所以,你可以像這樣一些代碼邏輯:

if (textItalicBtn && textBoldBtn) 
{} 
else if (textItalicBtn) 
{} 
else if (textBoldBtn) 
{} 
+0

是的,我知道我可以使用(textItalicBtn && textBoldBtn)的條件,但爲我創造的將花費我在我的代碼使用大量的if和else語句的編輯器以及許多其他選項。我正在尋找一些消息傳遞給textView,我可以在同一時間使它變得粗體和斜體,但是這麼長時間以來我終於認爲這是不可能的。我必須像BoldItalic和ifElse語句一樣使用英語。非常感謝您的迴應和幫助。我很感激。 – Sahar 2014-09-21 06:44:01