iOS UITextView加载本地html文件例子

有时候我们不是从服务器上直接加载一个网页,而是需要加载本地的html文件,具体实现的代码如下:

- (void)viewDidLoad {
    [super viewDidLoad];
    self.view.backgroundColor = [UIColor whiteColor];
    
    //创建从Bundle中来自HTML文件的URL
    NSURL *html = [[NSBundle mainBundle] URLForResource:@"right_obligations" withExtension:@"html"];
    
    // 用HTML创建attributedString
    NSAttributedString *attrStr = [[NSAttributedString alloc] initWithFileURL:html options:@{NSDocumentTypeDocumentAttribute:NSHTMLTextDocumentType} documentAttributes:nil error:nil];
    
    // 创建TextView,添加attributed str
    UITextView *textView = [[UITextView alloc] initWithFrame:CGRectMake(0, kHeaderHeight, kScreenWidth, kScreenHeight - kHeaderHeight)];
    textView.editable = NO;
    [textView setAttributedText:attrStr];
    [self.view addSubview:textView];
}

补充:关于 UITextView用法

//初始化并定义大小  

 UITextView *textview = [[UITextView alloc] initWithFrame:CGRectMake(20, 10, 280, 30)];
    textview.backgroundColor=[UIColor whiteColor]; //背景色
    textview.scrollEnabled = NO;    //当文字超过视图的边框时是否允许滑动,默认为“YES”
    textview.editable = YES;        //是否允许编辑内容,默认为“YES”
    textview.delegate = self;       //设置代理方法的实现类
    textview.font=[UIFont fontWithName:@"Arial" size:18.0]; //设置字体名字和字体大小;
    textview.returnKeyType = UIReturnKeyDefault;//return键的类型
    textview.keyboardType = UIKeyboardTypeDefault;//键盘类型
    textview.textAlignment = NSTextAlignmentLeft; //文本显示的位置默认为居左
    textview.dataDetectorTypes = UIDataDetectorTypeAll; //显示数据类型的连接模式(如电话号码、网址、地址等)
    textview.textColor = [UIColor blackColor];
    textview.text = @"UITextView详解";//设置显示的文本内容
    [self.view addSubview:textview];

UITextView的代理方法如下:
//将要开始编辑
- (BOOL)textViewShouldBeginEditing:(UITextView *)textView;

//将要结束编辑
- (BOOL)textViewShouldEndEditing:(UITextView *)textView;

//开始编辑
- (void)textViewDidBeginEditing:(UITextView *)textView;

//结束编辑
- (void)textViewDidEndEditing:(UITextView *)textView;

//内容将要发生改变编辑
- (BOOL)textView:(UITextView *)textView shouldChangeTextInRange:(NSRange)range replacementText:(NSString *)text;

//内容发生改变编辑
- (void)textViewDidChange:(UITextView *)textView;

//焦点发生改变
- (void)textViewDidChangeSelection:(UITextView *)textView;

有时候我们要控件自适应输入的文本的内容的高度,只要在textViewDidChange的代理方法中加入调整控件大小的代理即可
 
 
- (void)textViewDidChange:(UITextView *)textView{
    //计算文本的高度
    CGSize constraintSize;
    constraintSize.width = textView.frame.size.width-16;
    constraintSize.height = MAXFLOAT;
    CGSize sizeFrame =[textView.text sizeWithFont:textView.font
                                constrainedToSize:constraintSize
                                    lineBreakMode:UILineBreakModeWordWrap];
   
 //重新调整textView的高度
    textView.frame = CGRectMake(textView.frame.origin.x,textView.frame.origin.y,textView.frame.size.width,sizeFrame.height+5);
}

 
控制输入文字的长度和内容,可通调用以下代理方法实现
- (BOOL)textView:(UITextView *)textView shouldChangeTextInRange:(NSRange)range replacementText:(NSString *)text
{
    if (range.location>=100)
    {
        //控制输入文本的长度
        return  NO;
    }
    if ([text isEqualToString:@"\n"]) {
        //禁止输入换行
        return NO;
    }
    else
    {
        return YES;
    }
}

 
UITextView退出键盘的几种方式
因为iphone的软键盘没有自带的退键盘键,所以要实现退出键盘需要自己实现,有如下几种方式:
1)如果你程序是有导航条的,可以在导航条上面加多一个Done的按钮,用来退出键盘,当然要先实UITextViewDelegate。
 
- (void)textViewDidBeginEditing:(UITextView *)textView {
   
    UIBarButtonItem *done =    [[UIBarButtonItem alloc] initWithBarButtonSystemItem:UIBarButtonSystemItemDone
                                                                              target:self
                                                                              action:@selector(dismissKeyBoard)];
   
    self.navigationItem.rightBarButtonItem = done;
   
    [done release];
    done = nil;
   
}

- (void)textViewDidEndEditing:(UITextView *)textView { 
    self.navigationItem.rightBarButtonItem = nil;  
}

- (void)dismissKeyBoard {  
    [self.textView resignFirstResponder]; 
}

2)如果你的textview里不用回车键,可以把回车键当做退出键盘的响应键。
代码如下:

-(BOOL)textView:(UITextView *)textView shouldChangeTextInRange:(NSRange)range replacementText:(NSString *)text
{
    if ([text isEqualToString:@"\n"]) {
        [textView resignFirstResponder];
        return NO;
    }
    return YES;
}

 

 
3)还有你也可以自定义其他加载键盘上面用来退出,比如在弹出的键盘上面加一个view来放置退出键盘的Done按钮。
代码如下:

 
    UIToolbar * topView = [[UIToolbar alloc]initWithFrame:CGRectMake(0, 0, 320, 30)];
    [topView setBarStyle:UIBarStyleBlack];

    UIBarButtonItem *btnSpace = [[UIBarButtonItem alloc]initWithBarButtonSystemItem:UIBarButtonSystemItemFlexibleSpace
                                                                              target:self
                                                                              action:nil];
   
    UIBarButtonItem *doneButton = [[UIBarButtonItem alloc]initWithTitle:@"Done"
                                                                  style:UIBarButtonItemStyleDone
                                                                 target:self
                                                                 action:@selector(dismissKeyBoard)];
   
    NSArray * buttonsArray = @[btnSpace, doneButton];;
    [doneButton release];
    [btnSpace release];
    [topView setItems:buttonsArray];
    [textView setInputAccessoryView:topView];//当文本输入框加上topView
    [topView release];
    topView = nil;

-(IBAction)dismissKeyBoard
{
    [tvTextView resignFirstResponder];
}

时间: 2024-12-03 20:08:58

iOS UITextView加载本地html文件例子的相关文章

ios webview加载本地文件时崩溃

问题描述 ios webview加载本地文件时崩溃 加载本地一个docx格式的文件,程序崩溃,exc_bad_access 完全没有异常信息 解决方案 http://www.lxway.com/884821684.htm 解决方案二: 至少要上一下给我们代码看看嘛 解决方案三: iOS webView 加载文件 及 文件操作iOS中webview加载本地html文件iOS webview 加载html 乱码

iOS开发中UIWebView的加载本地数据的三种方式_IOS

UIWebView是IOS内置的浏览器,可以浏览网页,打开文档 html/htm pdf docx txt等格式的文件. safari浏览器就是通过UIWebView做的. 服务器将MIME的标识符等放入传送的数据中告诉浏览器使用那种插件读取相关文件. uiwebview加载各种本地文件(通过loadData方法): UIWebView加载内容的三种方式: 1 加载本地数据文件 指定文件的MIMEType 编码格式使用@"UTF-8" 2加载html字符串(可以加载全部或者部分html

uiwebview-IOS 的UIWebView能否加载本地html5?

问题描述 IOS 的UIWebView能否加载本地html5? 我在本地导入html5文件,用UIWebView显示,文件在UI里显示的全是带问号的图片,(也就是不能显示):请问哪位大牛帮帮忙,又什么好的办法: 解决方案 谢谢大家的关心,问题已经解决:是路径的问题,由于我没有把两个JS 文件加到工程中,(看似加进去了,其实没有),所以不能显示. 解决方案二: 可以的,参考UIWebView加载本地HTML5文件 解决方案三: http://blog.csdn.net/u013243469/art

xml-webview加载本地图片跨域问题

问题描述 webview加载本地图片跨域问题 html里面没有图片的引用都写到一个xml文件里面html里面只有一个JS引用,加载图片加载不出来只给我一个默认的图片和地址 有好心人回复说是跨域问题我对这方面不懂想问一个demo或者一些代码.谢谢! 解决方案 Android webview加载本地图片Android webview加载本地图片iOS webView加载本地html及图片等问题

IOS中使用UIWebView 加载网页、文件、 html的方法_IOS

 UIWebView 是用来加载加载网页数据的一个框.UIWebView可以用来加载pdf word doc 等等文件 生成webview 有两种方法: 1.通过storyboard 拖拽 2.通过alloc init 来初始化 创建webview,下列文本中 _webView.dataDetectorTypes = UIDataDetectorTypeAll; 是识别webview中的类型,例如 当webview中有电话号码,点击号码就能直接打电话 - (UIWebView *)webView

[IOS]UIWebView 请求网络页面或者加载本地资源页面

UIWebView是一个能够显示网页的IOS视图控件,我们可以用它来访问一个网站.下面是具体的实例: 操作步骤: 1.首先在xib文件中拖放一个UIWebView控件到view中 2.将下载的页面以及页面资源加载到项目中,但必须选择Create folder references for any added folders,然后知道文件在项目中是蓝色显示,而不是黄色显示 3.将webView的Delegate拖到File's Owner,继承UIWebView的Delegate协议,并且实现他的

html-ios加载本地文件多层网页目录怎么办?

问题描述 ios加载本地文件多层网页目录怎么办? 如题啊,加载出来就是好像那种网速不好卡的都加载到一页上面来了.. 解决方案 http://blog.csdn.net/mangosnow/article/details/36879725http://blog.sina.com.cn/s/blog_9072b28701012gnj.html 解决方案二: [IOS 开发]UIWebView 加载本地文件,多层的网页目录结构失败分析和解决,以及demo

用GeckoFx3.3去加载本地的html5文件,一直加载不完

问题描述 WPF中我用GeckoFx3.3去加载本地的html5文件(网页游戏),一直显示loading,等多长时间都加载不完,显示不了后面的小游戏,请各位大神指点!感谢! 解决方案 解决方案二:建议加载静态的对象,因为你加载的网页有可能是流媒体文件,和服务器不停的交互,所以可能不会完成解决方案三:引用1楼DOwnstairs的回复: 建议加载静态的对象,因为你加载的网页有可能是流媒体文件,和服务器不停的交互,所以可能不会完成 我加载的就是本地的html5文件,截图如下:解决方案四:是不是你方法

用UITextView加载rtfd文件

用UITextView加载rtfd文件   效果   说明 使用此方法可以实现十分简易的富文本显示效果,包括图文混排等等效果.   源码 // // ViewController.m // Rtfd // // Created by YouXianMing on 15/9/10. // Copyright (c) 2015年 ZiPeiYi. All rights reserved. // #import "ViewController.h" @interface ViewContro