2016-06-16 12 views
0

Xcode 7, Swift 2, приложение Mac OS X.Xcode привязывает текстовое поле к выбранному элементу в виде таблицы из другого ViewController

У меня есть раскадровка со следующей простой структурой; WindowController, содержащий SplitViewController. Верхняя панель Split View содержит ViewController, которая содержит представление таблицы. Нижняя панель Split View содержит текстовое поле.

My Table View привязан к объекту в моей модели данных с помощью контроллера массива TableViewArrayController). TableViewArrayController добавлен в Table View, содержащий View Controller. В представлении таблицы отображаются мои данные в порядке.

Я добавил второй контроллер массива (TextFieldArrayController) в панель управления представлением «Сплит-вид» и привязал его к тому же объекту объекта модели, что и TableViewArrayController. Я привязал текстовое поле к TextFieldArrayController. Текстовое поле отображает первый элемент в модели данных, но TextFieldArrayController не синхронизирует свое выбранное свойство с TableViewArrayController.

Это, по-видимому, очень простая настройка, и я ожидаю, что нередко захочется отображать элемент из выбранной строки в представлении таблицы в объекте, который находится в другом ViewController. Независимо от того, что я пытаюсь, я не могу заставить текстовое поле отображать свойство из выбранной строки.

Если я добавлю текстовое поле в ViewController Table View и привяжу его к тому же контроллеру массива, он отображает и позволяет мне редактировать свойство выделенной строки.

Может ли кто-нибудь предложить, как я должен привязать текстовое поле в одном представлении контроллера к выбранной строке таблицы, расположенной в другом контроллере просмотра?

ответ

0

На самом деле довольно необычная настройка, чтобы иметь несколько экземпляров NSArrayController для организации основных деталей. Вам не нужен TextFieldArrayController. Вы привязываете текстовое поле к тому же NSArrayController, как привязаны к представлению таблицы (в вашем случае это TableViewArrayController). Вот как настроить привязки для представления текста:

enter image description here

«ваше поле данных» является поле в модели, которую вы хотели бы показать в текстовом поле.

В вашей настройке с 2 контроллерами массивов, как вы ожидаете синхронизации выбора? Вы можете попытаться связать индексы выделения одного контроллера массива с тем же свойством второго контроллера массива ... но я никогда не видел такой настройки. Даже не уверен, что это сработает.

Вот пример: https://github.com/emankovski/stackexchangesplitexample

UPDATE: Пример показывает, как режим просмотра можно использовать вместо дочерних контроллеров. Подход к детским контроллерам также возможен, но требует гораздо больше кода без каких-либо оснований.

В случае, если вы хотите использовать более сложные решения, вам нужно пользовательские NSSplitViewController:

class SplitViewController: NSSplitViewController { 

dynamic var items = [String]() 

@IBOutlet var arrayController: NSArrayController! 

override func viewDidLoad() { 
    super.viewDidLoad() 

    items.append("One") 
    items.append("Two") 
    items.append("Three") 

    // 
    let master = self.splitViewItems[0].viewController as! MasterViewController 
    master.arrayController = self.arrayController 

    let detail = self.splitViewItems[1].viewController as! DetailViewController 
    detail.arrayController = self.arrayController 
} 

И тогда каждый контроллер мастер-деталь должна иметь ссылку на NSArrayController в родителю:

class MasterViewController: NSViewController { 

dynamic var arrayController: NSArrayController? 
} 

И:

class DetailViewController: NSViewController { 

dynamic var arrayController: NSArrayController? 
} 

Затем вы можете привязать вид стола мастера к

enter image description here

затем связать текст подробные сведения редактирует к:

enter image description here

Как вы видите гораздо больше действий, без причины ...

+0

Хороший совет, спасибо. Конечно, TableViewArrayController не находится в ViewController нижней панели Split View, поэтому он недоступен для выбора в привязке текстового поля. Как я мог бы сделать TableViewArrayController видимым, чтобы я мог привязать текстовое поле к тому же ArrayController? – TDC

+0

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

+0

Большое спасибо Юджин. – TDC