Swift项目中使用Instructions框架实现多按钮引导的逻辑优化问题
你不需要自定义状态变量来判断当前展示的是第几个引导,Instructions框架的coachMarkAt代理方法传入的index参数本身就是当前引导项的序号(从0开始计数),直接基于这个参数做分支判断即可。
具体实现步骤
- 首先实现返回引导总数量的数据源方法,告诉框架你需要展示2个引导项:
func numberOfCoachMarks(for coachMarksController: CoachMarksController) -> Int { return 2 }
- 改写引导项生成的代理方法,直接用
index判断对应绑定的视图:
func coachMarksController(_ coachMarksController: CoachMarksController, coachMarkAt index: Int) -> CoachMark { switch index { case 0: return coachMarksController.helper.makeCoachMark(for: view_schedule) case 1: return coachMarksController.helper.makeCoachMark(for: use_now) default: return coachMarksController.helper.makeCoachMark(for: use_now) } }
方案优势
- 无需维护自定义状态变量,彻底避免状态管理不当导致的逻辑错误
- 代码结构清晰易读,后续新增引导项只需增加对应
case分支即可,维护成本极低 - 完全符合框架本身的设计规范,不会出现时序错乱的问题
如果需要为不同引导项配置不同的提示文案、按钮文本,也可以通过index参数做分支判断实现,示例如下:
func coachMarksController(_ coachMarksController: CoachMarksController, coachMarkViewsAt index: Int, madeFrom coachMark: CoachMark) -> (bodyView: CoachMarkBodyView, arrowView: CoachMarkArrowView?) { let coachViews = coachMarksController.helper.makeDefaultCoachViews(withArrow: true, arrowOrientation: coachMark.arrowOrientation) switch index { case 0: coachViews.bodyView.hintLabel.text = "点击查看日程安排" coachViews.bodyView.nextLabel.text = "下一步" case 1: coachViews.bodyView.hintLabel.text = "点击立即启用设备" coachViews.bodyView.nextLabel.text = "完成" default: break } return (coachViews.bodyView, coachViews.arrowView) }
内容的提问来源于stack exchange,提问作者user
相关产品推荐
相关产品推荐

