簡體   English   中英

UITextView.text屬性不會第一次更新,然后在它出現時會剪輯或不顯示

[英]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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM