将RTF或文本文件加载到UITextView iPhone SDK中

9

您好,我想知道如何在UITextView中加载RTF或文本文件,我使用了几个代码但都没有成功。

NSString* filePath = [[NSBundle mainBundle] pathForResource:@"filename" ofType:@"txt"];
myTextView.text = filePath;

谢谢您。
5个回答

15

你可以尝试这个:

NSString *myText = [NSString stringWithContentsOfFile:filePath encoding:NSUTF8StringEncoding error:nil];
myTextView.text  = myText;

我的文本是'UITextView',而'myTextView'只是一个名称,我的文件是一个带有UTF8编码的txt文件。 - iOS.Lover
你是否在获取内容后使用NSLog()查看发生了什么,有任何内容吗?你是否尝试像David说的那样将NSError作为第三个变量? - vodkhang
4
非常抱歉,我忘记在接口构建器中连接输出口,非常非常抱歉。 - iOS.Lover
@vodkhang,对于该字符串是否可以使用attributedString? - IKKA
1
这只是将RTF转换为纯文本。我尝试使用RTFD,但它甚至无法加载。然后,我切换到RTF,它显示了原始的RTF文本,而不是以RichText方式格式化。因此,我在下面提交了另一个答案,说明我是如何使其工作的。 - Volomike
显示剩余2条评论

9
myTextView.attributedText =
[   NSAttributedString.alloc
    initWithFileURL:[ NSBundle.mainBundle URLForResource:@"filename" withExtension:@"rtf"  ]
    options:nil
    documentAttributes:nil
    error:nullptr
];

1
格式有点奇怪,但是它可以用于加载富文本文件并设置 UITextViewattributedText 属性。 - Dalmazio
1
这确实可以工作,但作为一个例子,它促进了不良的实践。使用点语法调用alloc最多是令人困惑的,最糟糕的情况下是滥用点语法。不遵循标准的多行参数对齐约定会使阅读变得困难。 - SwampThingTom
1
值得降低我的声誉吗?你教条主义者。 - Satachito

8

你目前所做的可以得到文件名,但需要更进一步并实际读取文件内容到一个NSString中,可以使用类似以下的方法实现:

NSError *err = nil;
NSString *fileContents = [NSString stringWithContentsOfFile:filePath 
                           encoding:NSUTF8StringEncoding
                           error:&err];
if (fileContents == nil) {
    NSLog("Error reading %@: %@", filePath, err);
} else {
    myTextView.text = fileContents;
}

对于纯文本,这将起作用(假设您的文件采用UTF8编码); 对于RTF,您需要进行更高级的操作(UITextView不知道如何显示RTF)。


3
如果它没有起作用,也许你应该检查错误状态(而不是通过传递“nil”来忽略它)。 - David Gelhar

0
将您的TextView控件(我点击了3次,直到它显示为NSTextView)拖到您的AppDelegate.m文件中第一个@interface行下面。我的是@interface AppDelegate()。之所以要点击三次,是因为默认情况下,当您在窗口上拖动TextView控件时,会创建3个控件,只有内部的内部控件被设置为NSTextView。其他控件用于滚动和屏幕剪切。然后,选择创建一个outlet,并将其命名为txtRich或您想要的任何名称。这在我的情况下创建了以下条目:
@property (unsafe_unretained) IBOutlet NSTextView *txtRich;

找到一个你想加载RTFD的类方法。我在AppDelegate.m文件中的applicationDidFinishLaunching方法下面做了我的操作。在这个方法里,粘贴以下内容:
NSBundle *myBundle = [NSBundle mainBundle];
NSString *sFile= [myBundle pathForResource:@"myrichfile" ofType:@"rtfd"];
[self.txtRich readRTFDFromFile:sFile];

你可能想知道这个mainBundle是从哪里来的,是否需要在某个地方声明它。答案是否定的。它是默认创建的魔法变量,就像NSNotificationCenter defaultCenter变量一样。它指的是你自己的应用程序包。

  1. 现在,使用TextEdit创建一个名为myrichfile.rtfd的文件。将其保存到您的项目文件夹中。将其拖动到支持文件下的项目窗口中。当提示时,请选择默认设置。这将把它与您的项目捆绑在一个资源文件夹中。

0

这是如何加载rtf文件的方法

NSURL * url = [NSBundle.mainBundle URLForResource:@"example"
                                    withExtension:@"rtf"];
NSData * content = [NSData dataWithContentsOfURL:url];
NSError * e;
NSAttributedString * aText = [[NSAttributedString alloc]
                              initWithData:content
                              options:@{NSDocumentTypeDocumentAttribute: NSRTFTextDocumentType}
                              documentAttributes:NULL
                              error:&e];

self.textView.attributedText = aText;

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接