一个用于处理 View Controller 内部和外部调用的库: FRDIntent

2016-10-30 09:30:04 +08:00
 lincode

FRDIntent :https://github.com/douban/FRDIntent

使用 iOS 系统方法完成各 view controller 之间的跳转,各 view controller 会耦合得很紧。跳转时,一个 view controller 需要知道下一个 view controller 是如何创建的各种细节。这造成了 view controller 之间的依赖。

iOS 系统还为各个应用间的相互调用提供了一种基于 URL 的处理方案。即应用可以声明自己可以处理某些有特定 scheme 和 host 的 URL 。其他应用就可以通过调用这些 URL 而跳转到该应用的某些页面。部分 URL Router 项目比如,使用这个机制通过调用 URL 来实现 view controller 之间的相互调用。这种方案存在一些问题,比如:

在 Android 中,这一问题得到了优雅的解决。这就是 Intent, Intent 是一个消息传递对象,用于启动 Activity 。 FRDIntent 是对 Android Intent 的一个模仿。当然,相对于 Android Intent , FRDIntent/Intent 做了极度简化。这是因为 FRDIntent/Intent 的使用场景更为简单:只处理应用内的 view controller 间跳转。在 FRDIntent/Intent 的基础上,我们在同一个项目封装了 FRDIntent/URLRoutes ,用于处理应用的外部调用。这样做其实是为了隔离了外部调用和内部调用,做这个区分会带来一些好处:

3961 次点击
所在节点    iDev
10 条回复
ldehai
2016-10-30 09:58:10 +08:00
从详情页返回数据,有没有优雅的方法。
比如 UITableViewController ,到 detailViewController 去修改数据,改完了要回去刷新列表数据。
几种常见的做法: 1 、 notification 2 、 delegate 3 、 block 。总觉得要写的代码还是有点多。
zongren
2016-10-30 10:51:21 +08:00
@ldehai 就这点代码还多。。
再说你可以封装好啊
iShawnWang
2016-10-30 11:14:28 +08:00
@ldehai 同求优雅的解决方案...
ldehai
2016-10-30 11:17:53 +08:00
@zongren 或者加个 Category
lincode
2016-10-30 11:31:51 +08:00
@ldehai FRDIntent 提供了一个优雅的方法: startControllerForResult 。这是对 Android 的 startControllerForActivity 的模仿。 FRDIntentDemo 中 https://github.com/douban/FRDIntent/blob/master/FRDIntentDemo/MainViewController.m#L78 对如何使用做了展示。
ldehai
2016-10-30 11:58:45 +08:00
@lincode 谢谢,看到了,是用 delegate 实现的
jesse_luo
2016-10-30 13:40:52 +08:00
赞,不过 FRDModuleManager 并没有开源的样子
lincode
2016-10-30 20:00:12 +08:00
jesse_luo
2016-10-30 21:56:20 +08:00
@lincode 嗯,后来在那篇文章里看到啦
kitalphaj
2016-10-31 16:32:55 +08:00
想要优雅可以用 unwind

这是一个专为移动设备优化的页面(即为了让你能够在 Google 搜索结果里秒开这个页面),如果你希望参与 V2EX 社区的讨论,你可以继续到 V2EX 上打开本讨论主题的完整版本。

https://www.v2ex.com/t/316536

V2EX 是创意工作者们的社区,是一个分享自己正在做的有趣事物、交流想法,可以遇见新朋友甚至新机会的地方。

V2EX is a community of developers, designers and creative people.

© 2021 V2EX