[英]UITextView.text property doesn't update first time, and then clips or doesn't display when it does
我正在嘗試將內容從字典導入UITextView。 該詞典包含與百分比配對的分子質量,例如:
24 -> 98
25 -> 1.9
26 -> 0.1
我有一個NSArray,其中包含字典中的鍵,並按升序排序。 因此,這是我的代碼來生成設置為textField.text屬性的字符串:
-(void)detailIsotopes:(NSMutableDictionary *)isotopes withOrder:(NSMutableArray *)order{
NSMutableString *detailString = [[NSMutableString alloc] init];
for (NSNumber *mass in order){
[detailString appendString:[NSString stringWithFormat:@"%d: %f\n", [mass integerValue], [[isotopes valueForKey:[NSString stringWithFormat:@"%@", mass]] floatValue]]];
}
NSLog(@"%@", detailString);
textField.text = detailString;
[detailString release];
}
這應該創建一個看起來像這樣的字符串:
24: 89
25: 1.9
26: 0.1
由於某種原因,此方法在首次運行時不會執行任何操作。 我看到了NSLog輸出,該輸出輸出正確的字符串。 但是,UITextView的內容不會更改:它們保留為Interface Builder中的“ Lorem ipsum dolor sit amet ...”。 如果我再次運行該方法,它會起作用。
UITextView顯示一些文本,然后僅在一行的一半處切掉,僅保留字符的頂部。 如果我刪除一半行上方的內容,則其他行從分隔線下方拉出:這些內容在那里,如果您理解我的意思,它們就會停止顯示。 如果我在視圖中啟用分頁,則此問題似乎消失了。 如果我這樣做,則該行不會被截斷,但是UITextView會在某一點之后停止顯示任何內容,盡管滾動條指示還有更多內容(有)。
設置內容時,包含UITextView的視圖不可見,如果有所不同。 單獨的視圖控制器生成NSMutableDictionary和NSMutableArray並將其發送到其委托,然后將其發送到應顯示UITextField並具有detailIsotopes:withOrder:方法的視圖。 可以使用信息按鈕在兩者之間交換。
有誰知道為什么發生這些事情? 感謝您提供的任何建議!
首先,我認為您不需要在此處分配和釋放NSMutableString。 只需使用[NSMutableString string]
初始化一個即可創建一個空字符串,您可以修改該字符串,而無需顯式釋放。
第二件事,您似乎在NSDictionnary的NSString中存儲了質量,為什么對stringWithFormat
(帶有%d
修飾符)使用它們的integerValue
方法,而不是按原樣使用它們? (NSStrings的stringWithFormat
修飾符為%@
)
另外,您在一開始就談論UITextView,然后談論UITextField,確定要在某個地方沒有犯錯嗎? 我猜您格式化的NSString的接收對象應該是UITextView(如果您同時具有textField和textView)。
如果不是這個問題,可能是您太早調用detailIsotopes
並創建了detailIsotopes
了。 嘗試NSLog它的地址,看看它是否nil
。 如果使用Interface Builder,並且UITextField是ib插座,則可能是這種情況。 如果這樣做,則可以將字典和數組存儲在viewController中,並在viewController的viewDidLoad
方法中設置textField。 或在顯示視圖后調用detailIsotopes
,我想這取決於您。
關於截斷的文本,我認為這是因為UITextView不會自動調整自身大小,因此會保持您最初設置的高度。 我通常這樣做的是:
CGRect frame = textView.frame;
frame.size.height = textView.contentSize; // you can adjust this to leave some space at the end
textView.frame = frame;
這會將textView的高度設置為內容(文本)的高度。 還要注意,如果您的textView應該顯示整個文本,則可以將其scrollingEnabled
屬性設置為FALSE
因此它永遠不允許滾動。
希望能有所幫助。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.