2015-09-18 2 views
2

Я пытаюсь создать многостраничный текстовый редактор, как в Pages, MS Word, .... В OS X я могу добиться этого, создав один NSLayoutManager с одним NSTextStorage для нескольких NSTextViews. Каждый NSTextView имеет свой собственный NSTextContainer. Ниже приведен код для OS X. Простой пример с расширением текста между двумя NSTextViews:NSLayoutManager с несколькими NSTextContainers заставляет UITextViews не выбираться/редактироваться

import Cocoa 

class ViewController: NSViewController { 

let layoutManager = NSLayoutManager() 
let textStorage = NSTextStorage(attributedString: NSAttributedString(string: "This is a test")) 
let textContainer1 = NSTextContainer() 
let textContainer2 = NSTextContainer() 

override func viewDidLoad() { 
    super.viewDidLoad() 

    // Do any additional setup after loading the view. 

    textStorage.addLayoutManager(layoutManager) 

    textContainer1.widthTracksTextView = true 
    textContainer1.heightTracksTextView = true 
    textContainer2.widthTracksTextView = true 
    textContainer2.heightTracksTextView = true 

    let textView1 = NSTextView(frame: CGRectMake(0, 100, 100, 100), textContainer: textContainer1) 
    textView1.backgroundColor = NSColor.greenColor() 
    self.view.addSubview(textView1) 
    layoutManager.addTextContainer(textContainer1) 


    let textView2 = NSTextView(frame: CGRectMake(200, 100, 100, 100), textContainer: textContainer2) 
    textView2.backgroundColor = NSColor.greenColor() 
    self.view.addSubview(textView2) 
    layoutManager.addTextContainer(textContainer2) 
} 
} 

Это работает.

Однако, когда я пытаюсь сделать то же самое на iOS с UITextView, UITextViews становятся недоступными или редактируемыми. См. Мой код для iOS:

import UIKit 

class ViewController: UIViewController, UITextViewDelegate { 

let layoutManager = NSLayoutManager() 
let textStorage = NSTextStorage(attributedString: NSAttributedString(string: "This is a test. This text should spread over two UITextViews. Bla bla bla bla bla bla bla bla bla bla bla bla bla")) 
let textContainer1 = NSTextContainer() 
let textContainer2 = NSTextContainer() 

override func viewDidLoad() { 
    super.viewDidLoad() 
    // Do any additional setup after loading the view, typically from a nib.   

    textStorage.addLayoutManager(layoutManager) 

    textContainer1.heightTracksTextView = true 
    textContainer1.widthTracksTextView = true 
    textContainer2.heightTracksTextView = true 
    textContainer2.widthTracksTextView = true 

    let textView1 = UITextView(frame: CGRectMake(0, 100, 100, 100), textContainer: textContainer1) 
    textView1.scrollEnabled = false 
    textView1.delegate = self 
    textView1.editable = true 
    textView1.selectable = true 
    textView1.backgroundColor = UIColor.greenColor() 
    self.view.addSubview(textView1) 
    layoutManager.addTextContainer(textContainer1) 

    let textView2 = UITextView(frame: CGRectMake(200, 100, 100, 100), textContainer: textContainer2) 
    textView2.scrollEnabled = false 
    textView2.delegate = self 
    textView2.editable = true 
    textView2.selectable = true 
    textView2.backgroundColor = UIColor.greenColor() 
    self.view.addSubview(textView2) 
    layoutManager.addTextContainer(textContainer2) 

} 
} 

Текст перетекает из одного UITextView в другой, но не редактируется. Я был бы очень благодарен за любые советы. Я искал эту проблему и обнаружил, что другие люди испытывают ту же проблему, но не нашли решений.

+0

Вы нашли решение на это? –

+0

Я хотел бы знать ответ для этого. –

ответ

0

Я тоже искал ответ, и, похоже, когда UITextView совместно с менеджером макетов с другими текстовыми представлениями, текстовое представление, к сожалению, становится статическим.

Эта проблема описана в прошивкой 7 Программирование Преодолевая границы: Разработка Advance приложений для Apple,, стр 375:

Потому что вы можете легко добавить дополнительные текстовые контейнеры с менеджером компоновки , и потому UITextView использует диспетчер компоновки, вы можете подумать, что было бы легко создать многоколоночный, редактируемый UITextView. К сожалению, это не тот случай. Если UITextView присваивается нескольким текстовым контейнерам [sic], он становится статическим и не может отвечать на взаимодействие с пользователем, такое как редактирование или выбор. Это известная проблема и в настоящее время «спроектирована».

Смежные вопросы