iOS图文存储的一种尝试

想法基于 iOS7 的 textkit 的基础!

由于 iOS7 将过去设计图文混排的方法打包到 textkit 当中,所以我们在 iOS7 系统下可以很简单的实现图文混排。

使用 NSAttributedString 来实现处理,将 NSAttributedString 转化为 NSData 再存储到文件里。

代码如下:

@property (weak, nonatomic) IBOutlet UITextView *input;    //文本输入框

@property (strong, nonatomic) NSMutableAttributedString * context;//存储图文

_context = _input.textStorage;    //把文本输入框内容赋给存储

NSString *imageName = @"1.jpg";

UIImage *image = [UIImage imageNamed:imageName];//通过文件名加载图片,有缓存

NSTextAttachment *attachment = [[NSTextAttachment alloc] initWithData:nil ofType:nil]; //附件

attachment.image = image;

NSAttributedString *textattach = [NSAttributedString attributedStringWithAttachment:attachment];//附件转化为 NSAttributedString

NSRange range = self.input.selectedRange;    //点击的位置,插入点

NSInteger i = 0;

i = range.location;

[_content insertAttributedString:textattach atIndex:i];   //将图片插入

NSString *path = [(NSSearchPathForDirectoriesInDomains(NSDocumentDirectory, NSUserDomainMask, YES)) objectAtIndex:0];  //获得沙箱的 Document 的地址
   NSString *pathFile = [path stringByAppendingPathComponent:@"text"];  //要保存的文件名

NSData *data = [_context dataFromRange:NSMakeRange(0, _content.length) documentAttributes:@{NSDocumentTypeDocumentAttribute:NSRTFDTextDocumentType} error:nil];   //将 NSAttributedString 转为NSData

[data writeToFile:pathFile atomically:YES];  //写入文件

读取:

@property (weak, nonatomic) IBOutlet  UITextView *output;

NSData *outputData = [NSData dataWithContentsOfFile:pathfile];

NSAttributedString *temp = [[NSAttributedString alloc] initWithData:outputData options:@{NSDocumentTypeDocumentAttribute : NSRTFDTextDocumentType} documentAttributes:nil error:nil];     //读取

[_output  setAttributedText:temp];   //显示内容

注释:这里没考虑图片大小对显示的影响,建议设置大小在插入图片的时候

时间: 2024-10-13 05:21:26

iOS图文存储的一种尝试的相关文章

iOS数据存储的几种方式

iOS的数据存储是iOS应用开发的重要知识点: 关于这方面知识,网上有很多介绍,但对于代码层次的使用方式并未有系统全面介绍.此文章针对iOS稍熟悉的童鞋,需要对CoreData的原理有一定的了解.目前存储方式大概有以下几种: NSKeyedArchiver  适用简单数据加密 NSUserDefaults  适用配置参数 Write  文件操作,同NSKeyedArchiver SQLite3  操作较复杂,不建议使用. CoreData  取代SQLite3,但要遵循NSManagedObje

ios数据存储的几种常用方式

1.NSKeyarchiver 2.NSUserDefault 3.PList 4.Write 5.SQLite 6.KeyChain 示例: 1.NSKeyarchiver 将数据存入文件: NSString *rootDir = NSHomeDirectory(); NSString *path = [rootDir stringByAppendingPathComponent:@"test.txt"]; NSMutableData *data = [NSMutable data]

【iOS开发-75】iOS数据存储的三种简单方式:plist、preference以及用NSCoding存储对象

实际开发中,存储数据主要是用SQLite.而在练习中,我们主要用如下三种存储方式. (1)利用plist存储简单地NSString.NSArray.NSDictionary等. (2)利用preference存储,和上面的类似,存储的是简单的数据,本质上还是一个plist文件. (3)利用NSCoding存储对象这些复杂的数据,本质上是一个data文件,需要被存储的类遵守NSCoding协议并实现init和encode方法. 代码如下: --在ViewController.m中 - (void)

IOS数据本地存储的四种方式--

注:借鉴于:http://blog.csdn.net/jianjianyuer/article/details/8556024 在IOS开发过程中,不管是做什么应用,都会碰到数据保存问题.将数据保存到本地,能够让程序更加流畅,不会出现让人厌恶的菊花状,使得用户的体验更好.下面是介绍数据保存的方式 第一.NSKeyedArchiver:采用归档的形式来保存数据.(归档——解档)———大量数据和频繁读写不合适使用 1.归档器的作用是将任意的对象集合转换为字节流.这听起来像是NSPropertyLis

iOS存储的三种方式

iOS中存储的3中方式: 1.NSUserDefaults 注意存储基本对象类型是没有问题的,但是要存储自定义对象,则要将对象内所有的属性(或是需要存储的属性)序列化,实现NSCoding协议序列化. 存:[[NSUserDefaults standardUserDefaults] setValue:@"yellow" forKey:@"color"]; [[NSUserDefaults standardUserDefaults] synchronize]; 取:N

iOS代码加密的几种方式

众所周知的是大部分iOS代码一般不会做加密加固,因为iOS APP一般是通过AppStore发布的,而且苹果的系统难以攻破,所以在iOS里做代码加固一般是一件出力不讨好的事情.万事皆有例外,不管iOS.adr还是js,加密的目的是为了代码的安全性,虽然现在开源畅行,但是不管个人开发者还是大厂皆有保护代码安全的需求,所以iOS代码加固有了生存的土壤.下面简单介绍下iOS代码加密的几种方式. iOS代码加密的几种方式 1.字符串加密 字符串会暴露APP的很多关键信息,攻击者可以根据从界面获取的字符串

IOS数据存储 —— 2 存储方式

IOS数据存储方式 iOS开发常用数据存储方式有:plist.偏好设置 NSUserDefaults.对象归档 NSKeyedArchiver.SQLite3和Core Data 1. plist文件 存储 plist文件通常用于储存用户设置,利用xml属性列表归档NSDictionary.NSArray.NSNumber等类型数据 在使用plist进行数据存储和读取,只适用于系统自带的一些常用类型才能用 注意:plist不能存储自定义对象 2. 偏好设置 NSUserDefaults 偏好设置

IOS数据存储之NSUserDefaults

前言: 作为从事Android开发人来说一定听说过SharedPreferences,然后要成为一名ios开发工程师来说咋能不知道NSUserDefaults!接下来让我们认识一下. NSUserDefaults简介: NSUserDefaults是一种存储轻量级的本地数据方式,NSUserDefaults是一个单例,主要用于数据的永久保存,简单实用.试用场景:比如我们保存一下用户的登录信息,一个标识等.支持的数据格式有:NSNumber(Integer.Float.Double),NSStri

iOS - 数据存储方式(本地化)

iOS中数据存储方式 一般使用以下4种: 1.NSKeyedAchiever//序列化 存放对象 2.NSUserDefaults//本质是plist存储 NSData.NSString.NSNumber.NSDate.NSArray.NSDictionary //存储到沙盒下的Library/Preferences/ 3.writeToFile:atomically://直接写文件方式:NSString.NSArray.NSDictionary.NSData.NSNumber,存放在一个属性列