我想向用戶顯示文本以通知數據源中沒有內容。例如,如果您沒有聯繫人,則可以在聯繫人應用程序中看到這種行爲,並在灰色文本的表格中間顯示。有沒有簡單的方法來做到這一點,或者我必須使用一些技巧,如創建空單元格或其他東西..謝謝!如果數據源爲空,則爲tableview佔位符文本
回答
沒有(AFAIK)任何內置方式讓表視圖在空時顯示消息。如果數據源爲空,您可以讓tableView:numberOfRowsInSection:
返回1,並且tableView:cellForRowAtIndexPath:
返回一個「虛擬」單元,表示沒有數據。或者您可以添加自己的視圖來顯示相應的消息,完全忽略(空)表格視圖。
我寫了three different approaches in my blog:
- 去與失範所描述的簡單的解決方案:在您的數據源方法使用條件。
- 使用「神奇」的全部類別UITableView+NXEmptyView。
- 對於特殊情況(空,加載等)使用單獨的數據源類。
下面是一個簡短而甜蜜的解決方案。
第一步,在你的UITableViewController初始化,添加:
UILabel *placeholder = [[UILabel alloc] init];
placeholder.font = [placeholder.font fontWithSize:20];
placeholder.numberOfLines = 0; // Use as many lines as needed.
placeholder.text = NSLocalizedString(@"Your text here", nil);
placeholder.textAlignment = NSTextAlignmentCenter;
placeholder.textColor = [UIColor lightGrayColor];
placeholder.hidden = YES; // Initially hidden.
[self.tableView addSubview:placeholder];
self.placeholder = placeholder; // You'll need a reference to the placeholder.
第二步,在你的UITableViewController,添加:
- (void)viewWillLayoutSubviews
{
[super viewWillLayoutSubviews];
self.placeholder.frame = self.tableView.bounds;
}
最後一步,顯示/在需要的時候隱藏的佔位符。
更好的解決方案是不使用UITableViewController。只需將一個tableView添加到UIViewController,然後將一個佔位符視圖添加到tableView上方的UIViewController。使用自動佈局可使佔位符垂直和水平居中。最後,在需要時顯示/隱藏佔位符。
你們對這個解決方案有什麼看法?請給出意見。
這對我來說很完美,在Swift中實現它。但我有個問題。最後一步「在需要時顯示/隱藏佔位符」。爲此,在tableView(_:numberOfRowsInSection:)內部,在返回表格中的行數之前,我已經包含了:'placeholder.hidden = myDataSource.count> 0',並且就像我想要的那樣工作,但我想知道它是否包含代碼的正確位置。或者,如果該函數僅用於返回行數,而沒有額外的代碼。 – alondono 2014-11-15 10:02:01
在Swift 2。0
只是日曆下面,我有一個實現代碼如下
func TabelaSemDados(Array:NSArray){
if Array.count == 0 {
tableView.tableFooterView = UIView(frame: CGRect.zero)
tableView.backgroundColor = UIColor.clearColor()
var label = UILabel()
label.frame.size.height = 42
label.frame.size.width = tableView.frame.size.width
label.center = tableView.center
label.center.y = (tableView.frame.size.height/2)
label.numberOfLines = 2
label.textColor = UIColor.grayColor()
label.text = "No Data Text"
label.textAlignment = .Center
label.tag = 1
self.tableView.addSubview(label)
}else{
self.tableView.viewWithTag(1)?.removeFromSuperview()
}
}
稱爲viewdidapper:
override func viewDidAppear(animated: Bool) {
TabelaSemDados(self.Agenda)
}
這是一個非常乾淨的解決方案,如果你的tableview不是從左邊緣到右邊緣,你需要將幀源添加到標籤中心 – Johannes 2016-01-18 19:49:18
請看here
我可以建議要你注意在DZNEmptyDataSet,StatefulViewController,UIEmptyState和StatusProvider
但這個庫是很大的,在大多數情況下,你可以使用@Pablo Ruan的回答
- 1. Echo佔位符,如果字段爲空
- 2. Wicket RepeatingView:如果列表爲空,則刪除佔位符
- 3. 如果文本框爲空,則在數據庫中寫入空
- 4. IOS:如果UITextField爲空,如何獲取佔位符文本以返回?
- 5. 如何在編輯器爲空時添加佔位符文本
- 6. 如果資源數據爲空,則清除數據透視表
- 7. 如果數據源中的值爲空,則刪除文本字段?
- 8. 如果「值」字段爲空,如何添加佔位符屬性
- 9. 如果按鈕文本爲空,則
- 10. 如果值爲空,則隱藏文本
- 11. 顯示佔位符文本通過數據源創建
- 12. 如果數據爲空,則不顯示
- 13. iOS tableview動畫佔位符
- 14. jquery佔位符函數:當輸入爲空時,佔位符值被髮送
- 15. Howto?在TableView中,如果NSMutableArray爲空,則顯示其他數組
- 16. 位置佔位符文本
- 17. 即使文本框爲空,如何向tableView添加數據?
- 18. 數據佔位符
- 19. 文本作爲文本框輸入的佔位符?
- 20. javascript函數確保文本包含格式爲$佔位符$
- 21. 如果文本框爲空,則將文本框返回到defaultvalue
- 22. 如果文本值爲空,則隱藏文本框
- 23. 文本框佔位符
- 24. as3文本框佔位符
- 25. 佔位符文本對齊
- 26. 更改佔位符文本
- 27. 動畫佔位符文本?
- 28. 顯示佔位符文本
- 29. Angular2 i18n佔位符文本
- 30. Thymeleaf佔位符=「文本」
我不明白您的博客中implementatoin中的tableView numberOfRowsInSection將返回1,即使沒有視圖,然後你做,如果([tableView numberOfRowsInSection:0]> 0)檢查數字是否高於0,我相信它會一直是因爲你是默認返回1,你能解釋這個解決方案嗎? – Necronet 2014-01-03 11:39:24
這個想法是,當表視圖爲空時,您有一個單獨的數據源。在您的視圖控制器中,如果底層數據發生變化(例如,用戶添加/刪除了某些內容),則檢查哪個數據源適用。 – 2014-01-05 15:45:50
我不得不說這個解決方案在檢查NXEmptyView類別後非常糟糕。它在CATEGORY中調用了reloadData和layoutSubviews方法,你如何確保調用者不使用相同的黑客方法?我之前通過相同的解決方案,但我更喜歡爲自定義tableview構建獨立的空視圖類。 – Itachi 2016-03-09 05:36:50