当前位置: 首页 > news >正文

如何二次开发TYZRNEditor:扩展富文本功能与工具栏的完整指南

如何二次开发TYZRNEditor:扩展富文本功能与工具栏的完整指南

【免费下载链接】Blum-auto-botBlum-auto-bot项目地址: https://gitcode.com/gh_mirrors/blumauto/Blum-auto-bot

TYZRNEditor 是一款将 React Native 与原生 UI 深度融合的 iOS 富文本编辑器与 Markdown 编辑器开源项目,它基于 WordPress-Editor-iOS、MMMarkdown、Moleskine 等成熟库二次封装而来。本文面向初次接触编辑器二次开发的开发者,用最简洁的方式带你读懂 TYZRNEditor 的源码结构,并手把手演示如何扩展富文本功能、自定义工具栏按钮与预览能力。无论你是要做图文笔记 App、博客写作工具,还是社区发帖编辑器,这篇 TYZRNEditor 二次开发指南都能帮你快速上手。

TYZRNEditor 是什么:一套编辑器,两种编辑模式

TYZRNEditor 提供了两个开箱即用的 React Native 组件:

  • TYZRNEditorView:富文本编辑器,基于 WebView + 原生格式栏实现,支持标题、加粗、斜体、引用、列表、链接、图片/视频插入等功能;
  • TYZRNMKEditor:Markdown 编辑器,基于 Moleskine 高亮文本框,支持实时语法高亮与一键预览。

两个组件都通过原生 Manager 桥接到 React Native,JS 侧只需几行代码即可嵌入页面。项目自带演示动图,可以直观感受编辑器的整体效果:

二次开发前的准备工作:工程导入与日志配置

由于项目通过 XIB 构建格式栏,暂时无法直接通过 npm 安装,因此二次开发的正确姿势是下载完整工程后手动引入。仓库地址为:https://gitcode.com/gh_mirrors/blumauto/Blum-auto-bot

下载后你需要做三件事:

  1. TYZRNEditorView.jsTYZRNMKEditor.js复制到你的 React Native 工程相应目录;
  2. 在 Xcode 工程中引入 TYZRNEditor 相关的原生文件(头文件、实现文件、资源与OtherLib第三方库);
  3. 在 AppDelegate 中配置 CocoaLumberjack 日志系统。

工程的文件结构可以参考下图,红框内就是二次开发最常打交道的 TYZRN 系列文件:

日志配置代码集中在 AppDelegate 中,使用 DDLog 输出到控制台与文件,方便你在扩展工具栏时追踪调用链:

快速理解源码结构:四大核心文件

开始改代码之前,先花两分钟认清这四类文件的分工,它们构成了整个编辑器的调用链:

文件职责
TYZRNEditorView.jsJS 组件封装,负责暴露属性与回调
TYZRNEditorViewManager.m原生桥接层,导出属性与方法给 JS
TYZRNEditorView.m原生容器视图,搭建导航栏与编辑控制器
TYZRNEditorViewController.m核心编辑控制器,处理内容、图片视频与格式事件

TYZRNEditorViewManager.m中可以看到桥接的完整形态:RCT_EXPORT_MODULE()导出模块,RCT_EXPORT_VIEW_PROPERTY(contentStr, NSString)导出初始化属性,RCT_EXPORT_METHOD(getContentStrMethod:)导出供 JS 调用的取内容方法。理解这层桥接,是扩展富文本功能的地基。

如何扩展富文本功能:工具栏按钮的完整生命周期

第一步:找到工具栏的"户口本"

富文本编辑器的格式栏由 WordPress-Editor-iOS 提供,核心文件位于ios/OtherLib/WordPress-Editor-iOS-develop/Classes/WPEditorFormatbarView.m,它负责渲染一排格式按钮;而按钮按下后的行为分发,则集中在WPEditorViewController.m(约 100~240 行)。工具栏的初始化、置灰逻辑、选中状态都在这个控制器里管理。

第二步:新增一个按钮

WPEditorFormatbarView.xib中新增一个 BarButtonItem,然后在WPEditorFormatbarView.m里给它绑定action。接着在WPEditorViewController.m中实现对应的方法,调用editorView上已有的命令接口即可。以"插入引用"为例,最终执行的其实是 WebView 中的 execCommand,而这套命令体系封装在ZSSRichTextEditor.js中。

第三步:把按钮结果传回 JS

按钮触发的格式变更会通过editorFormatBarStatusChanged等代理方法通知,而内容变化则通过editorTextDidChange回调。TYZRNEditorViewController.m中的editorView:title:content:方法会把最新内容打包成字典,再由 Manager 层通过sendDeviceEventWithName:@"event"推送给 JS 侧,JS 端在TYZRNEditorView.js里用DeviceEventEmitter监听即可。一条从按钮到 JS 的完整链路就是:XIB 按钮 → 原生命令 → 内容变更事件 → 桥接 → JS 回调。

扩展 Markdown 编辑器:从高亮到预览

如果你更关心 Markdown 编辑器 TYZRNMKEditor 的二次开发,重点看两个文件:

  • TYZRNMKEditor.m:负责初始化高亮文本框MKTextView、管理"预览/编辑"切换,以及键盘高度适配;
  • TYZENMKPreView.m:负责把 Markdown 文本交给 MMMarkdown 转成 HTML,再通过 WebView 渲染预览。

想给 Markdown 编辑器增加新能力,最常见的两个切入点:一是修改TYZENMKPreView.m中的setBodyMarkdown:方法,自定义 HTML 模板(markdown.html)与样式(markdown.css);二是扩展高亮规则,在MKMarkdownCodeBlockHighlighter等系列类中新增语法高亮器。预览切换的逻辑藏在rightButtonAction方法里,改标题、改按钮文案都很直观。

双向通信的三种姿势:属性、方法、事件

二次开发中 90% 的需求都能用这三种通信方式解决:

方式示例适用场景
导出属性RCT_EXPORT_VIEW_PROPERTY(titleStr, NSString)初始化/刷新内容
导出方法RCT_EXPORT_METHOD(getTitleStrMethod:)JS 主动获取数据
事件通知sendDeviceEventWithName:@"backEvent"原生主动推送消息

JS 组件TYZRNEditorView.jsgetContentString()getTitleString()展示了方法调用的写法,componentWillMount中注册的监听器则展示了事件接收的写法。想要新增"保存草稿"、"字数统计"之类的功能,照着这个模式复制即可。

调试建议:让扩展之路更顺畅

最后分享几条实用的调试经验,帮助你少走弯路:

  • 打开TYZRNEditorViewManager.m里被注释掉的RCTLogInfo,可以在控制台看到完整的 HTML 源码,排查格式问题很管用;
  • 图片上传的进度与失败逻辑在TYZRNEditorViewController.mtimerFireMethod:中,测试上传失败时放开注释掉的模拟代码即可;
  • 修改OtherLib下的库文件后,记得在 Xcode 中执行 Clean 再编译,避免缓存导致改动不生效;
  • 日志系统是二次开发的好帮手,editorDidFinishLoadingDOM等生命周期回调里多打日志,能帮你快速定位"内容没显示"的根因。

至此,你已经掌握了 TYZRNEditor 二次开发的核心脉络:从工程导入、源码结构,到富文本工具栏扩展、Markdown 预览增强,再到 JS 与原生双向通信。下一步,打开源码动手改一个按钮试试吧,相信很快你就能打造出属于自己的富文本编辑器。

【免费下载链接】Blum-auto-botBlum-auto-bot项目地址: https://gitcode.com/gh_mirrors/blumauto/Blum-auto-bot

创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考

http://www.jsqmd.com/news/1405899/

相关文章:

  • 台州热门轻食糕点培训机构|港焙学校真实测评 - 港焙西点-知美人美学
  • URP Blit Render Feature 兼容性路线图:从 Unity 2019 到 6.3 的分支选择与升级指南
  • 318川藏线跟车队费用多少钱?2026市场实价+隐形消费拆解 - 老金2026
  • WVP-PRO 实战指南:三步搭起基于 GB28181 的一体化视频监控平台
  • IRISMAN 体验记:一台吃灰多年的 PS3,是怎么被这款备份管理器救活的
  • PinView密码隐藏功能详解:setPasswordHidden与星号明文切换
  • DeepSeek‑Harness Windows 本地快速上手
  • 微信聊天记录如何永久保存?1 个免费工具,3 步导出 HTML、Word、CSV
  • OntoL产品设计思路—大模型是旁白,本体才是主角 - 北方的银狐
  • 机翻把我的排版全毁了?tri-translate 的跨格式等价救回来
  • pgrust 安装教程:Docker 一键启动你的第一个 Rust 版 PostgreSQL
  • 长沙雨花区卫生间地漏疏通|长沙管道疏通公司推荐 - 超人防水
  • ESP32 物联网开发入门:一文带你从点亮 LED 到做出会联网的温湿度计
  • 两张看起来相同的图片,为何一张能反解出“我喜欢“?聊聊 BlindWaterMark 盲水印
  • ai免费写论文实用吗?实测3款AI论文软件,结果有好有坏! - 论文助教
  • A05_五种语言,同一个接口:Java _ Go _ Node.js _ C# _ PH
  • 2026年8月上海徐汇区附近花店实测|本地鲜花布置消费避坑指南 - 超人防水
  • 北京丰台包包回收白皮书发布后北京市监部门将加强日常监管与专项整治 - 大牌科普时报
  • 什么是说话人分离?用diar_streaming_sortformer_4spk-v2理解“谁在何时说了什么“
  • 看病化验要降价了?全国“一把尺“,医疗检验收费将同检同价
  • V6.0.0把经营流程做进了系统:护航俱乐部接单平台与游戏电竞护航陪玩源码系统小程序更新观察 - 壹软科技
  • 实测Zotero PDF2zh翻译插件:三步让英文文献阅读效率翻倍
  • 2026东莞房屋漏水维修避坑指南|正规修缮与乱象对比,少花冤枉钱 - 筑宅安
  • 2026最新降AIGC网站盘点:11款中英文工具横评,降AI率有效的方法是什么? - 降AI小能手
  • 微信聊天记录如何永久保存:WeChatMsg导出HTML、Word、CSV完整指南
  • 2026年西安美业培训合作选型:正规性核查标准与避坑指南,附陕西欧曼谛时尚美业学校合规性深度解析 - U渠道
  • 模块1 PCB制板-项目1 电路板设计-任务1 初识嘉立创EDA
  • 2026年8月上海徐汇区本地花店实测|同城鲜花定制与场景布置服务体验汇总 - 超人防水
  • 手把手5步用Camunda Modeler从零搭建一个请假审批流程
  • 2026惠州黄金回收避坑指南 本地正规门店实用参考 - 生活测评小能手