大多数应用程序会显示内容(数据集)的列表,这些列表往往在某些时候为空,特别是对于新用户和空白账户来说更是如此。空屏由于不明确说明发生了什么,如果存在错误/故障或者如果用户需要在您的应用内执行某些操作才能消费内容,因此会引起混淆。
空数据集 对于以下方面很有帮助:
此库的设计方式无需使用扩展的 UITableView 类。在使用 UITableViewController 时仍然可用。通过简单实现数据源和代理协议,您就可以完全自定义应用中空数据集的内容和外观。
可在 Cocoa Pods 中找到。
pod 'UITableView-DataSet'
有关完整文档,请访问 CocoaPods 自动生成的文档
#import "UITableView+DataSet.h"
遵从数据源和/或代表者。
@interface MainViewController : UITableViewController <DZNTableViewDataSetSource, DZNTableViewDataSetDelegate>
返回要在空数据集中显示的内容,并利用 NSAttributedString 功能来自定义文本外观。
- (NSAttributedString *)titleForTableViewDataSet:(UITableView *)tableView {
NSString *text = @"Please Allow Photo Access";
NSDictionary *attributes = @{NSFontAttributeName: [UIFont boldSystemFontOfSize:18.0],
NSForegroundColorAttributeName: [UIColor darkGrayColor]};
return [[NSAttributedString alloc] initWithString:text attributes:attributes];
}
- (NSAttributedString *)descriptionForTableViewDataSet:(UITableView *)tableView {
NSString *text = @"This allows you to share photos from your library and save photos to your camera roll.";
NSMutableParagraphStyle *paragraph = [NSMutableParagraphStyle new];
paragraph.lineBreakMode = NSLineBreakByWordWrapping;
paragraph.alignment = NSTextAlignmentCenter;
NSDictionary *attributes = @{NSFontAttributeName: [UIFont systemFontOfSize:14.0],
NSForegroundColorAttributeName: [UIColor lightGrayColor],
NSParagraphStyleAttributeName: paragraph};
return [[NSAttributedString alloc] initWithString:text attributes:attributes];
}
- (NSAttributedString *)buttonTitleForTableViewDataSet:(UITableView *)tableView forState:(UIControlState)state {
NSDictionary *attributes = @{NSFontAttributeName: [UIFont boldSystemFontOfSize:17.0]
return [[NSAttributedString alloc] initWithString:@"Continue" attributes:attributes];
}
返回对空数据集的预期行为,并接收用户事件。
- (BOOL)tableViewDataSetShouldAllowTouch:(UITableView *)tableView {
return YES;
}
- (BOOL)tableViewDataSetShouldAllowScroll:(UITableView *)tableView {
return YES;
}
- (void)tableViewDataSetDidTapView:(UITableView *)tableView {
}
- (void)tableViewDataSetDidTapButton:(UITableView *)tableView {
}
在 viewcontroller 的 -dealloc 方法中将 dataSetSource 和 dataSetDelegate 设置为 nil 非常重要。因为此库在底层使用 KVO,当 tableview 准备释放时必须移除观察者。
- (void)dealloc
{
self.tableView.dataSetSource = nil;
self.tableView.dataSetDelegate = nil;
}
此样例项目复制了几种流行应用(约20个)的空数据集及其准确的内容和外观,如 Airbnb、Dropbox、Facebook、Foursquare 等。使用此项目了解自定义空数据集外观的简单性和灵活性。
此其他样例项目展示了世界各个国家的列表。通过搜索,它自动补全,当没有内容匹配时,显示一个简单的空数据集。使用此项目更好地了解 UITableViewDataSource 和 DZNTableDataSetSource 协议之间的交互。
我尝试构建了一个易于使用的 API,同时也足够灵活以应对多种变化,但我相信还有改进和添加更多功能的方法,所以请随时提出想法、问题或拉取请求进行合作。
(MIT 许可证)
版权(c)2014 Ignacio Romero Zurbuchen [email protected]
特此授予任何人无条件的许可,免费获得此软件及其相关文档文件(以下简称“软件”)的副本,包括但不限于使用、复制、修改、合并、发布、分发、再许可和/或销售软件副本的权利,并允许获得软件的人这样做,但前提是必须遵守以下条件:
上述版权声明和本许可声明应包括在软件的任何副本或实质部分中。
软件按“原样”提供,不提供任何形式的保证,无论明确表示还是暗示,包括但不限于对适销性、特定用途适用性和非侵权的保证。在任何情况下,无论因合同、侵权或其他原因而产生的索赔、损害或其他责任,作者或版权持有者均不承担任何责任,无论该索赔、损害或其他责任是否与软件或软件的使用或其他相关操作有关。