2014-10-15 3 views
0

У меня есть два NSTableViews в одном представлении, и они имеют одинаковый источник данных и делегат.Два NSTableViews в одном представлении

Два вида таблиц называются varTableView и constraintTableView. Теперь число строк в каждом отличается, и я, я нахожу, что трудно реализовать два метода:

-(NSInteger) numberOfRowsInTableView:(NSTableView *)tableView -(id) tableView:(NSTableView *)tableView objectValueForTableColumn:(NSTableColumn *)tableColumn row:(NSInteger)row

Есть ли способ определить tableviews и вернуть соответствующее количество строк?

Моя реализация было что-то вроде этого:

-(NSInteger) numberOfRowsInTableView:(NSTableView *)tableView{ 
    if([tableView.identifier isEqualToString:@"variableTableView"]){ 
     return [self.arrayOfVariableNames count]; 

    } 
    else{ 
     return [self.arrayOfConstraintNames count]; 
    } 
} 

он всегда возвращается счетчик имен ограничений, но не имена переменных

+0

Действительно ли вы установили идентификатор переменной VariableTableView в "variableTableView"? Вам лучше просто сравнивать значения указателей ссылок на таблицы. – trudyscousin

+0

Да. Я установил его в ID восстановления – Morpheus

+0

Не знаю, что вы подразумеваете под идентификатором восстановления. Существует свойство на 'NSControl' (из которого' NSTableView' является подклассом), называемым 'идентификатором'. * Это то, что вам нужно установить, если вы собираетесь использовать этот подход. – trudyscousin

ответ

3

вы можете реализовать это либо с помощью имени таблицы или тег таблицы, чтобы знать, какие таблицы частности метод делегата называется монетой

-(NSInteger) numberOfRowsInTableView:(NSTableView *)tableView -(id) tableView: (NSTableView *)tableView objectValueForTableColumn:(NSTableColumn *)tableColumn row: (NSInteger)row 
    { 
     if (tableView == varTableView)// or check table tag, first you need to set tag for table 
     { 
      // do something with varTableView 
      return ([array1 count]); 

     } 
     else if (tableView == constraintTableView) 
     { 
     // do something with constraintTableView 
      return ([array2 count]); 
     } 
    } 
+0

Я пытался сделать это, используя метод идентификатора. он не работает. – Morpheus

+1

использование таблица бирка, будет работать –

+0

теги и он работает сейчас. благодаря – Morpheus

2

Да. Это параметр tableView в методах, которые вы включили.

if (tableView == varTableView) 
{ 
    // do something with varTableView 
} 
else if (tableView == constraintTableView) 
{ 
    // do something with constraintTableView 
} 

Число строк, как правило, представляет собой количество объектов в массиве, служащих источником данных.

+0

+1 для простого ответа и довести вас до 5k :) – rebello95

+0

Aw, благословите ваше сердце; Я ценю это. – trudyscousin

1

Как указывается в других ответах Вы можете дифференцироваться между двумя таблицами путем сравнения его выходами. Есть и другой способ, но вам придется немного изменить существующие проекты.

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

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