2012-03-30 54 views
5

我正在使用靜態UITableview,設置在故事板中。對於一些細胞(風格=右細節)我設置detailTextlabel.text在viewWillAppear中是這樣的:detailTextLabel最初沒有顯示

self.recentProductsCell.detailTextLabel.text = description; 

該單元的標籤不顯示。如果我NSLog文本顯示它確定。 我檢查了detailTextLabel沒有隱藏。 我沒有更改故事板中的任何其他屬性。 單元格有一個detailDisclosure附件,但將其設置爲別的沒有幫助。

然後奇怪的事情: 如果我運行並且detailTextlabel不顯示,我通過點擊它並移動手指來選擇該行。從那開始detailTextLabel確實顯示!即使隱藏和重新顯示視圖,標籤仍然可見。然而,重置並在代碼中設置它會使標籤再次消失。

我可能做錯了什麼,或者這是一個錯誤?

編輯:檢查5.0和5.1,同樣的行爲。 我通過在viewWillAppear中的代碼中選擇並取消選擇此行,發現了一個醜陋的解決方法。所以我補充說:

[self.tableView selectRowAtIndexPath:[NSIndexPath indexPathForRow:3 inSection:0] animated:NO scrollPosition:UITableViewScrollPositionNone]; 
[self.tableView deselectRowAtIndexPath: [NSIndexPath indexPathForRow:3 inSection:0] animated:NO]; 

它的工作原理,但我可以看到該行被選中和取消選擇。所以我也改變了selectionStyle,但是現在這行在顯示視圖時閃爍。

額外的評論:在相同的viewWillAppear中,我設置了其他靜態單元格的detailLabel,並且它們顯示得很好。

+0

您可以發佈相關的代碼(如果有的話)以創建和重用細胞嗎?至於爲什麼會發生這種行爲,我仍然有一些理論,但我需要看到更多的代碼來指明它。 – Sam 2012-04-03 18:12:59

+0

對不起。也許在復活節之後,小節假日即將到來。我覺得這很奇怪,我想嘗試從頭開始重新構建項目並向Apple提交錯誤報告。只是爲了體驗。但這需要一些時間。也許是星期二。感謝您的關注。 – Bjinse 2012-04-04 21:18:03

回答

8

我確實發現detailLabel沒有顯示,不是爲什麼,恕我直言,這是一個錯誤。

如果detailLabel.Text的前一個值爲零或爲空字符串,則在將其設置爲新值後,不會顯示detailLabel。 如果我將detailLabel設置爲除nil/empty(初始)之外的任何內容,然後將其設置爲其他值,則新值將正確顯示。

不顯示的原因可能更復雜,然後只是空着,但在我的情況下,這解決了我的問題。如果我希望它是「空的」,我可能會以背景顏色顯示detailLabel。

+0

謝謝,它的工作。請報告給蘋果公司。 – santhu 2014-08-26 07:57:58

+0

謝謝,來自蘋果的另一個奇怪的錯誤。 – 2015-07-24 08:09:06

+0

2015年,仍然是一個錯誤。 – 2015-07-25 16:53:18

0

嘗試設置單元格樣式=字幕

+0

UITableViewCellStyleSubTitle – Injectios 2012-03-30 14:01:06

+0

仍存在同樣的問題。最初沒有顯示字幕,但在選擇行後顯示。主標題最初顯示居中,並彈出至頂部以爲detailLabel騰出空間。 – Bjinse 2012-04-03 13:40:39

0

您設置的標籤放錯了地方。

發佈您的UITableViewDelegate/DataSource代碼。您需要設置在任一cellForRowAtIndexPath:willDisplayCellAtIndexPath:

+0

不,因爲我使用STATIC單元格,通過在屬性檢查器中爲UITableView設置內容來創建故事板:靜態單元格。請參閱以下問題的答案:[link](http://stackoverflow.com/questions/7863775/creating-custom-uitableviewcells-within-a-storyboard) – Bjinse 2012-04-03 13:53:26

+0

您仍然可以使用'willDisplayCellAtIndexPath'。這將允許您在單元格在屏幕上繪製之前立即進行最終更改。 – Sam 2012-04-03 13:59:23

+0

唉,willDisplayCellAtIndexPath僅在靜態單元格首次構建tableview時被觸發,方法如下: - [UITableView(UITableViewInternal)_createPreparedCellForGlobalRow:withIndexPath:]。之後,該方法在單元顯示時不會被觸發。 (是的,代表被設置爲控制器..)。 – Bjinse 2012-04-03 14:21:42

0

這個值,你將所有的控制到的UITableViewCell的contentView?如果你簡單地將它添加到單元格中,這有時會導致不可靠的行爲。

+0

我正在使用預定義的UITableViewCellStyleValue2類型(通過在IB中選擇Style = Right Detail)。所以我不做自定義控件。 – Bjinse 2012-04-03 14:53:27

5

我有這個問題的重複。相同的配置 - 故事板中的靜態單元格,但具有左側細節單元格。我還看到觸摸單元格的問題使其可見。

我通過將故事板中的初始細節標籤內容設置爲單個空間來解決此問題。在代碼中設置實際的詳細標籤內容後,我發送一個sizeToFit消息到詳細標籤。

+0

我再次遇到這個bug,現在更有經驗。你的回答是正確的,因爲在storyBoard中設置初始值是有幫助的。我不需要發送sizeToFit到細節標籤。在調試器中進行檢查時,我發現如果故事板中沒有指定默認值,detaillabel沒有正確的大小和原點。只發送一個sizeToFit確實改變了框架的大小,但不是原點。我的問題解決了。 – Bjinse 2013-03-05 23:00:49

+0

大小適合作爲一個很好的解決方法對我來說。有沒有人向蘋果報告過這件事? – raeldor 2015-03-01 21:43:54

0

我有同樣的問題,我認爲這是一個錯誤。 如果我按住行,我會看到detailTextLabel。如Bjinse所說,它通常發生在將detailTextLabel先前設置爲nil或「」(不含空格=空字符串)的情況下。

所以我結束了設置我想空的detailTextLabel「」(用一個空格)。這對我有效。

0

我發現它只發生在iPhone 6plus(8.4)在我的情況。

溶液1(推薦):

不重用細胞後,問題解決了。

//var cell = tableView.dequeueReusableCellWithIdentifier(cellIdentifier) 
//if cell == nil { 
// cell = UITableViewCell(style: .Value1, reuseIdentifier: cellIdentifier) 
//} 

var cell = UITableViewCell(style: .Value1, reuseIdentifier: cellIdentifier) 

解決方案2:

由於文本顯示後,我們滾動或觸摸,所以我決定重新加載數據。這也適用,但視圖顯示和detailText文本顯示之間存在延遲。

override func viewDidAppear(animated: Bool) { 
    super.viewDidAppear(animated) 
    tableView.reloadData() 
}