欧美bbbwbbbw肥妇,免费乱码人妻系列日韩,一级黄片

iOS實(shí)現(xiàn)富文本編輯器的方法詳解

 更新時(shí)間:2016年10月08日 11:26:24   投稿:daisy  
大家在開(kāi)發(fā)的時(shí)候經(jīng)常會(huì)用到富文本編輯器,所以這篇文章就給大家整理了如何使用iOS實(shí)現(xiàn)富文本編輯器的方法,相信本文對(duì)大家具有一定的參考借鑒價(jià)值,有需要的朋友們可以一起來(lái)看看。

前言

富文本編輯器不同于文本編輯器,國(guó)內(nèi)做的比較好的比如有百度的UEditor和kindEditor。但是這兩個(gè)也有它的缺點(diǎn):界面過(guò)于復(fù)雜、不夠簡(jiǎn)潔、UI設(shè)計(jì)也比較落后、不夠輕量化,這篇文章我們將給大家介紹利用iOS如何實(shí)現(xiàn)富文本編輯器。

實(shí)現(xiàn)的效果

解決思路

采用webview加載一個(gè)本地html文件,該html內(nèi)部編寫好js方法用于與oc相互調(diào)用 最終輸出該富文本字符串傳輸給服務(wù)器

為什么選擇這樣的方式

服務(wù)端要求我最終返回的數(shù)據(jù)格式為:

{
 @"Id":"當(dāng)時(shí)新建模板這個(gè)不傳,更新模板必須傳",
 @"title":"模板標(biāo)題",
 @"text":"<p dir="ltr">測(cè)試文字</p>
![](http://upload-images.jianshu.io/upload_images/1694866-a9a1da57455b2054.jpg?imageMogr2/auto-orient/strip%7CimageView2/2/w/1240)<p>![](http://pic.baikemy.net/apps/kanghubang/486/3486/1457968327238.amr@type=1@duration=1852)<p>",
 @"sendstr":"22372447516929 如果模板要保存同時(shí)發(fā)送給患者,這個(gè)值必須傳,可以多個(gè)患者發(fā)送患者id以逗號(hào)隔開(kāi)"
 @"1457968280769.jpg":
 @"文件名":"BACES64 數(shù)據(jù) 這個(gè)是多個(gè)圖片或語(yǔ)音一起上傳"
}

其中text字段即為富文本字段.

同時(shí)又需要編輯已有文本等功能.倘若用原生代碼寫較為復(fù)雜,最終選擇了使用本地html代碼實(shí)現(xiàn)

解決步驟

新建一個(gè)richTextEditor.html文件

1.頁(yè)面設(shè)計(jì)

/*界面不要太簡(jiǎn)單 一個(gè)簡(jiǎn)單的輸入框*/
 <style>
  img 
  {
   display: block;
   width: 100%;
   margin-top: 10px;
   margin-bottom: 10px;
   }
  [contenteditable=true]:empty:before
  {
   content: attr(placeholder);
   color: #a6a6a6;
  }
  #content 
  {
   padding: 10px 0;
   font-family:Helvetica;
   -webkit-tap-highlight-color: rgba(0,0,0,0);
   min-height:100px;
   }

<div id="content" contenteditable="true" onmouseup="saveSelection();" onkeyup="saveSelection();" onfocus="restoreSelection();" placeholder="輕觸屏幕開(kāi)始編輯正文" ></div>

2.js方法設(shè)計(jì)

插入圖片

 function insertImage(imageName, imagePath)
 {
  restoreSelection();
  var imageElement = document.createElement('img');
  var breakElement = document.createElement('div');
  imageElement.setAttribute('src', imagePath);
  imageElement.setAttribute('id', imageName);
  breakElement.innerHTML = "<br>";
  editableContent.appendChild(imageElement);
  editableContent.appendChild(breakElement);
 }

 function updateImageURL(imageName, imageURL) {
  var selectedElement = document.getElementById(imageName);
  selectedElement.setAttribute('src', imageURL);
 }

獲取html代碼

function placeHTMLToEditor(html)
{
  editableContent.innerHTML = html;
}

4.oc與js相互調(diào)用

oc端實(shí)例一個(gè)webview加載該html和一個(gè)按鈕用于添加圖片

  self.webView = [[UIWebView alloc]initWithFrame:CGRectMake(0, 64+50, [UIScreen mainScreen].bounds.size.width, self.view.frame.size.height - 50)];
  self.webView.delegate = self;
  [self.view addSubview:self.webView];

  NSBundle *bundle = [NSBundle mainBundle];
  NSURL *indexFileURL = [bundle URLForResource:@"richTextEditor" withExtension:@"html"];

  [self.webView setKeyboardDisplayRequiresUserAction:NO];
  [self.webView loadRequest:[NSURLRequest requestWithURL:indexFileURL]];

  UIButton *btn = [UIButton buttonWithType:UIButtonTypeCustom];
  [btn addTarget:self action:@selector(addImage:) forControlEvents:UIControlEventTouchUpInside];
  [self.view addSubview:btn];

添加完圖片后與html對(duì)接

 //以時(shí)間戳重命名圖片
  NSString *imageName = [NSString stringWithFormat:@"iOS%@.jpg", [self stringFromDate:[NSDate date]]];
  NSString *imagePath = [documentsDirectory stringByAppendingPathComponent:imageName];
  NSString *mediaType = [info objectForKey:UIImagePickerControllerMediaType];
  UIImage *image = [info objectForKey:UIImagePickerControllerOriginalImage];
  NSInteger userid = [[NSString stringWithFormat:@"%@", [[NSUserDefaults standardUserDefaults] objectForKey:@"userID"]] integerValue];
  NSString *url = [NSString stringWithFormat:@"http://pic.baikemy.net/apps/kanghubang/%@/%@/%@",[NSString stringWithFormat:@"%ld",userid%1000],[NSString stringWithFormat:@"%ld",(long)userid ],imageName];

  NSString *script = [NSString stringWithFormat:@"window.insertImage('%@', '%@')", url, imagePath];
  NSDictionary *dic = @{@"url":url,@"image":image,@"name":imageName};
  [_imageArr addObject:dic];//全局?jǐn)?shù)組用于保存加上的圖片
  [self.webView stringByEvaluatingJavaScriptFromString:script];

編輯完成后拿出html代碼

  NSString *html = [self.webView stringByEvaluatingJavaScriptFromString:@"document.getElementById('content').innerHTML"];

編輯服務(wù)器中的富文本

   NSString *place = [NSString stringWithFormat:@"window.placeHTMLToEditor('%@')",self.inHtmlString];
   [webView stringByEvaluatingJavaScriptFromString:place];

5.與服務(wù)端對(duì)接

此時(shí)我們?nèi)〕龅母晃谋救缦?

企鵝的時(shí)候要[站外圖片上傳中……(4)]<div>阿空間里發(fā)紅包啦?我</div>[站外圖片上傳中……(5)]<div><br></div>

其中id部分為我處理的特殊部分

處理方法如下

-(NSString *)changeString:(NSString *)str
{  
  NSMutableArray * marr = [NSMutableArray arrayWithArray:[str componentsSeparatedByString:@"\""]];

  for (int i = 0; i < marr.count; i++)
  {
    NSString * subStr = marr[i];
    if ([subStr hasPrefix:@"/var"] || [subStr hasPrefix:@" id="])
    {
      [marr removeObject:subStr];
      i --;
    }
  }
  NSString * newStr = [marr componentsJoinedByString:@"\""];
  return newStr;
}

總結(jié)

好了,至此可實(shí)現(xiàn)一個(gè)富文本編輯器的新增與編輯。以上就是本文的全部?jī)?nèi)容,希望對(duì)大家的學(xué)習(xí)或者工作能帶來(lái)一定的幫助,如果有疑問(wèn)大家可以留言交流。

相關(guān)文章

  • iOS11 WKWebView內(nèi)容過(guò)濾規(guī)則詳解

    iOS11 WKWebView內(nèi)容過(guò)濾規(guī)則詳解

    本篇文章主要介紹了iOS11 WKWebView內(nèi)容過(guò)濾規(guī)則詳解,小編覺(jué)得挺不錯(cuò)的,現(xiàn)在分享給大家,也給大家做個(gè)參考。一起跟隨小編過(guò)來(lái)看看吧
    2017-07-07
  • iOS自定義推送消息提示框

    iOS自定義推送消息提示框

    這篇文章主要為大家詳細(xì)介紹了自定義iOS推送消息提示框的相關(guān)代碼,具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下
    2016-09-09
  • iOS自定義UIDatepicker日期選擇器視圖分享

    iOS自定義UIDatepicker日期選擇器視圖分享

    下面小編就為大家分享一篇iOS自定義UIDatepicker日期選擇器視圖分享,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。一起跟隨小編過(guò)來(lái)看看吧
    2018-01-01
  • IOS開(kāi)發(fā)中加載大量網(wǎng)絡(luò)圖片優(yōu)化方法

    IOS開(kāi)發(fā)中加載大量網(wǎng)絡(luò)圖片優(yōu)化方法

    這篇文章主要介紹了IOS開(kāi)發(fā)中加載大量網(wǎng)絡(luò)圖片如何優(yōu)化的相關(guān)資料,需要的朋友可以參考下
    2017-03-03
  • 淺談iOS推送證書生成pem文件(詳細(xì)生成過(guò)程)

    淺談iOS推送證書生成pem文件(詳細(xì)生成過(guò)程)

    這篇文章主要介紹了淺談iOS推送證書生成pem文件(詳細(xì)生成過(guò)程),小編覺(jué)得挺不錯(cuò)的,現(xiàn)在分享給大家,也給大家做個(gè)參考。一起跟隨小編過(guò)來(lái)看看吧
    2018-08-08
  • iOS App開(kāi)發(fā)中UITextField組件的常用屬性小結(jié)

    iOS App開(kāi)發(fā)中UITextField組件的常用屬性小結(jié)

    這篇文章主要介紹了iOS App開(kāi)發(fā)中UITextField組件的常用屬性小結(jié),文中還介紹了UITextField隱藏鍵盤及為內(nèi)容增加校驗(yàn)的兩個(gè)使用技巧,需要的朋友可以參考下
    2016-04-04
  • iOS中利用UIBezierPath + CAAnimation實(shí)現(xiàn)心跳動(dòng)畫效果

    iOS中利用UIBezierPath + CAAnimation實(shí)現(xiàn)心跳動(dòng)畫效果

    這篇文章主要給大家介紹了關(guān)于iOS中利用UIBezierPath + CAAnimation實(shí)現(xiàn)心跳動(dòng)畫效果的相關(guān)資料,文中通過(guò)示例代碼介紹的非常詳細(xì),對(duì)大家的日常開(kāi)發(fā)具有一定的參考學(xué)習(xí),需要的朋友們下面隨著小編來(lái)一起學(xué)習(xí)學(xué)習(xí)吧。
    2017-10-10
  • iOS應(yīng)用程序之間的幾種跳轉(zhuǎn)情況詳解

    iOS應(yīng)用程序之間的幾種跳轉(zhuǎn)情況詳解

    這篇文章給大家詳細(xì)介紹了iOS應(yīng)用程序之間跳轉(zhuǎn)的幾種情況,包括跳轉(zhuǎn)到另一個(gè)程序的主界面、跳轉(zhuǎn)到另一個(gè)程序的指定界面以及如何從目標(biāo)程序的非主頁(yè)界面回到當(dāng)前(跳轉(zhuǎn)前)程序呢?有需要的朋友們可以下面來(lái)一起看看。
    2016-09-09
  • iOS簡(jiǎn)單易用的GCD計(jì)時(shí)器的實(shí)現(xiàn)原理

    iOS簡(jiǎn)單易用的GCD計(jì)時(shí)器的實(shí)現(xiàn)原理

    在日常開(kāi)發(fā)中總會(huì)碰到需要計(jì)時(shí)器的功能,常見(jiàn)的定時(shí)器有NSTimer、GCD、CADisplayLink。網(wǎng)上也有很多的教程介紹三者的區(qū)別,今天主要講的是GCD這種方式使用以及封裝。感興趣的小伙伴們可以參考一下
    2018-11-11
  • iOS無(wú)障礙適配西瓜視頻Voice?Over實(shí)踐示例

    iOS無(wú)障礙適配西瓜視頻Voice?Over實(shí)踐示例

    本文從研發(fā)的視角出發(fā),講述了如何使用?Voice?Over、如何適配?Voice?Over?以及適配過(guò)程中如果遇到問(wèn)題應(yīng)該如何解決。希望能夠有所幫助,祝大家多多進(jìn)步,早日升職加薪
    2022-05-05

最新評(píng)論