如果你在iOS世界里有过多地经验,你可能无疑听说过人们对苹果样本代码的抱怨(或者你自己也抱怨过)。别误会,偶尔有些绝对精彩的代码,比如 UIImage+ImageEffects(今天可能已经添加到 App Store 上半数应用程序中...),但这些似乎并不多见。在我看来,最大的遗漏之一是苹果没有提供如何正确管理集合视图和表格视图数据源的示例代码。坦白说,我知道你在想什么,“有什么不知道的?我创建一个带有表格视图的视图控制器,然后把数据源和代理设置为自我。很简单。”这在较简单的情况下是可以这样做的,但当开始构建更复杂的表和集合填充规则或想要重用视图控制器时,事情会变得很复杂。
传统上,为了解决这个问题,我通常会创建一个实现了 UITableViewDataSource 的 NSObject 子类,然后创建一个新的数据源对象实例,将其交给表格视图,然后继续操作。这确实很有效,但我仍然缺乏我可以依赖的最佳实践。幸运的是,今年在 WWDC 上有一个会议专门讨论了这个问题,并提供了一些指导,说明苹果工程师是如何在苹果发布的应用程序中解决这个问题。而且还有示例代码!
不用说,这个会议,WWDC 会议 232:使用集合视图的高级用户界面,是今年我参加的最好的会议之一。奥勒·贝格曼似乎也同意,他在 博客上对这次谈话做了更详细的讨论。我强烈建议观看会议视频并查看示例代码。这是促进代码重用和解开应用中更复杂关系的绝佳方式。确保你可以检查出来!
最好的祝福,
阿伦
我们正在阅读
本周控件
DZNEmptyDataSet
每周汇总
RACollectionViewReorderableTripletLayout
可以拖动对单元格进行重新排列的自定义collectionView布局。 pod 'RACollectionViewReorderableTripletLayout' MIT 许可证。 |
MZBookshelfCollectionViewLayout
类似于iBooks的书架布局,适用于UICollectionView。 MIT 许可证。 |
GSIndeterminateProgressBar
类似于不确定进度的iOS控件 MIT 许可证。 |
LKAssetsLibrary
LKAssetsLibrary为ALAssetsLibrary提供分组/过滤/排序功能。 MIT 许可证。 |
PI_EmojiPicker
Tattle-UI
作为开发者,我们很难理解和重现测试员报告的一些UI错误。从测试员的角度看,测试员在测试时用段落解释简单的UI错位。 Tattle-UI通过提供从测试员获得UI反馈的更简单机制来解决这个问题。 MIT 许可证。 |
btSimpleRippleButton
这是一个具有涟漪效果的iOS自定义按钮。它简单易于集成和自定义。支持使用块调用的回调。 MIT 许可证。 |
HRColorPicker
RColorPicker是一个轻量级的iOS颜色选择器,对于用户和开发人员来说都很容易使用。 BSD许可。 |
AKTagsInputView
一个方便的查找和选择输入视图,用于编写标签数据。 功能
Apache 2.0许可。 |
LMGeocoder
为地理编码和反向地理编码提供简单封装,使用Google Geocoding API和Apple iOS Geocoding Framework。 MIT 许可证。 |
Glyphish Gallery
以风格浏览和搜索您的Glyphish图标。 支持OS X 10.8及以上版本。 许可证未指定。 |
VideoCover
添加背景视频的简单演示 Apache 2.0许可。 |
RSPOPPickerSheet
JPRequest
JPRequest是一个简单的Objective-C对象,用于从Web服务发送和接收POST和GET数据。 MIT 许可证。 |
UAProgressView
UAProgressView是一个简单、轻量级但强大的动画圆形进度视图。 MIT 许可证。 |
Swift船员运算符
包含一个Swift文件,向项目中添加船员运算符(
在iOS和OS X上工作,但Xcode项目设置为OS X命令行工具。 MIT 许可证。 |
INSSearchBar
动画搜索栏。 最初为ShopNow v2开发(http://www.shopnow.de)。 该搜索栏设计为一个独立组件,可以轻松拖放任何现有iOS项目中。 关于此控件的更多信息请参阅http://salanki.com/insomniac/2014/06/03/the-search-bar-experiment/ 许可证未指定。 |
BWTitlePagerView
重新创建Twitter导航控制器分页器。 Apache 2.0许可。 |
TMConsecutiveDayHelper
一个相当基本的实现,有助于跟踪用户连续天数开启您的应用。 该组件使用NSUserDefaults跟踪日期。它还使用了在PMCalendar仓库中的NSDate+Helpers类别,该仓库位于https://github.com/kovpas/PMCalendar,使用MIT许可。 安装 将TMConsecutiveDayHelper.h和TMConsecutiveDayHelper.m复制到您的项目中,以及NSDate+Helpers.h和NSDate+Helpers.m。 在您的App Delegate的application didFinishLaunchingWithOptions:方法中调用:
然后,要检查用户连续天数,可以调用: [TMConsecutiveDayHelper streakSizeInDays]; 或者,您可以调用 [TMConsecutiveDayHelper hasComeBackForThisExactNumberOfDaysConsecutively:5],它返回一个BOOL值 目前还没有重置记录的逻辑,但添加起来非常简单。基本上,你负责你想如何使用这些信息,而类仅跟踪记录本身。 缺点 因为应用使用了NSUserDefaults,所以它很容易被用户通过更改设备日期来进行操作。组件还使用了ARC,因此如果你的项目正在使用引用计数(即保留释放),那么在你的App/Target设置中“编译源”下“TMConsecutiveDayHelper.m”行内的编译器标志“-fobjc-arc”中放置它。 MIT 许可证。 |
ODSAccordionView
又一个手风琴式容器视图。 MIT 许可证。 |
btSimplePopUp-Menu
这是一个简单的iOS弹出菜单。受iOS7启动板上分组文件夹(相似)的启发。它 entirely 基于UIView。包括扁平风格,使用块提供回调,以及多种选择圆角和平直角、边框弹出窗口。这个控制支持使用滚动进行分页,从而用户可以添加任意数量的菜单项到弹出菜单中。 任何选中的菜单都会在点击的项上创建涟漪效果。 易于使用,易于集成。 MIT 许可证。 |
BHTKeyboardAnimationBlocks
UIViewController类别,使处理键盘出现/消失时的动画变得更加容易。提供了一种简单的基于块的API来设置在所有UIKeyboardNotifications上要执行的动画。 MIT 许可证。 |
MNTPullToReact
MNTPullToReact 是著名 Pull to Refresh 交互的扩展进化。 Apache 2.0许可。 |
AFBlurSegue
为模态视图控制器模糊背景的自定义 UIStoryboardSegue 实现。 MIT 许可证。 |