I have a View Controller that contains a UITextView. This UITextView gets the text updated programmatically depending on the data model controlling it (around 30 different text options). The content in the UITextView will always be quite long, at about 450 words each. Paragraphs will range from 2 - 5.
It all works perfect. I just need a visual way to break up the paragraphs. Right now, I'm using \n\n to create a couple of line breaks in between paragraphs. While this works, I ultimately need headings.
In IB, I changed the text property from Plain to Attributed. This allows me to modify the text in a WYSIWYG-like fashion right in Xcode. Works great, but I am not using IB to change the text.
I did try using a WebView (code below). I created an extremely basic HTML file with H1 and P tags. This will unfortunately create 30+ HTML files in my project. I don't like this from a manageability standpoint. The text also can NOT be selectable, which it is with a webview (I don't want to resort to CSS [-webkit-user-select] to mitigate this issue.)
let path: String? = Bundle.main.path(forResource: "myHTML", ofType: "html")
let file = try? String(contentsOfFile: path!, encoding: String.Encoding.utf8)
let baseURL = URL(fileURLWithPath: Bundle.main.bundlePath)
self.myWebView.loadHTMLString(file!, baseURL: baseURL)
My ideal solution
Can I stick with my current setup? Programmatically changing the UITextView text with my data model, WHILE being able to change the text attributes in code to create my paragraph headings?
Edit - Trying to get this to work with MVC
allFormattedDescriptions: [
Formatted(heading: "heading 1", descriptionText: "Lorem Ipsum Paragraph 1"),
Formatted(heading: "heading 2", descriptionText: "Lorem Ipsum Paragraph 2"),
Formatted(heading: "heading 3", descriptionText: "Lorem Ipsum Paragraph 3")
]
// Ideal formatting; every paragraph will have a heading. Can handle that with one object that requires both a heading and description text (paragraph).
struct Formatted {
var heading: String!
var descriptionText: String!
var bodyParagraphStyle: NSMutableParagraphStyle = {
let style = NSMutableParagraphStyle()
style.lineSpacing = 10
style.paragraphSpacingBefore = 6
style.paragraphSpacing = 6
return style
}()
var headerParagraphStyle: NSMutableParagraphStyle = {
let style = NSMutableParagraphStyle()
style.paragraphSpacingBefore = 24
return style
}()
var bodyAttributes: [String: AnyObject]!
var headerAttributes: [String: AnyObject]!
}