如果你在iOS圈子里待了一段时间,毫无疑问你会听到人们抱怨(或者你自己也可能抱怨过)关于苹果示例代码的典型状态。不要误会我,偶尔你会看到一些真正的瑰宝,比如 UIImage+ImageEffects(这可能是今天App Store上一半的应用都添加过的功能...),但这些实在是太少见了。在我看来,最大的遗漏之一就是苹果没有提供如何正确管理集合视图和表格视图数据源的示例代码。是的,我知道你在想什么,“有什么不知道的?我创建了一个拥有表格视图的视图控制器,然后只是将数据源和代理设置为self,很简单。” 对于更简单的情况,这样做是合理的,但是当你要建立更复杂的填充表格和集合的规则时,或者当你想要重用视图控制器时,事情会变得非常复杂。
传统上,为了解决这个问题,我总是会创建一个实现 UITableViewDataSource 的 NSObject 子类,然后创建一个新的数据源实例,将其传递给表格视图,然后继续。而且这确实非常有效,但我仍然缺乏可以信赖的最佳实践。幸运的是,今年在WWDC上有一个会议正是针对这个问题,提供了有关苹果工程师如何在苹果产品中解决这个问题的指导。而且还有示例代码!
不用说,这个会议,WWDC会议232:使用集合视图的先进用户界面,是我今年参加的最好的会议之一。Ole Begemann看起来也同意,并且在博客上更详细地介绍了这个演讲。我强烈推荐观看会议视频和查看示例代码。这是一个促进代码重用并解开你应用程序中更复杂关系的绝佳方式。一定要查查它!
最好的祝愿,
Aaron
我们正在阅读的内容
本周控件的掌控
DZNEmptyDataSet
每周汇总
RACollectionViewReorderableTripletLayout
可以拖动以进行单元格重新排序的自定义collectionView布局。 pod 'RACollectionViewReorderableTripletLayout' MIT许可证。 |
MZBookshelfCollectionViewLayout
类似于iBooks的书架布局,用于UICollectionView。 MIT许可证。 |
GSIndeterminateProgressBar
像iOS不确定进度条一样的控制 MIT许可证。 |
LKAssetsLibrary
LKAssetsLibrary为ALAssetsLibrary提供分组/过滤/排序功能。 MIT许可证。 |
PI_EmojiPicker
基于NSView或NSViewController的简单表情选择器。 我以AGEmojiKeyboard(https://github.com/ayushgoel/iOS-emoji-keyboard)的优秀作品为基础创建了一个OS X版本。 它非常简单,只需几个小时的工作即可实现。如果想让用户在编辑菜单中不必使用“特殊键盘”就能输入表情符号,那么它很有用。 例如,Messages/iChat旁边有表情符号选择器的文本输入。 MIT许可证。 |
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框架。 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,如果你的项目使用引用计数(即保留/释放),那么请将编译器标志 ' -fobjc-arc ' 放在 TMConsecutiveDayHelper.m 中 '编译源代码' 下的 '编译阶段' 标签内,位于你的 App/Target 设置中。 MIT许可证。 |
ODSAccordionView
另一个折叠式容器视图。 MIT许可证。 |
btSimplePopUp-Menu
这是一个简单的 iOS 弹出菜单。灵感来自 iOS7 春扳上的分组文件夹(外观相似)。它完全基于 UIView。包括扁平外观、使用 block 的回调以及多种曲线或平直角度的选项、带边框的弹出菜单。这个控件支持滚动翻页,因此用户可以将多个菜单项添加到弹出菜单中。 选中任何菜单都会在点击的项目上产生涟漪效果。 易于使用,便于集成。 MIT许可证。 |
BHTKeyboardAnimationBlocks
UIViewController 分类简化了处理键盘出现/消失时动画的难度。提供基于 block 的简单 API 来设置每个 UIKeyboardNotification 应该执行的动画。 MIT许可证。 |
MNTPullToReact
MNTPullToReact 是著名 Pull to Refresh 交互的扩展进化。 Apache 2.0授权。 |
AFBlurSegue
为模态视图控制器实现自定义的 ServletException,用于模糊背景。 MIT许可证。 |