2015-09-03 2 views
0

Я пытаюсь найти способ, позволяющий мне загружать больше данных в NSTableView, чтобы пользователь мог видеть все свои данные. Тем не менее, я использую только для разработки iOS, а не для разработки Mac OSX. У iOS есть способ, с помощью которого можно загружать UITableView для загрузки большего количества данных. Есть ли такой способ для разработки Mac OSX или есть лучшая альтернатива? Я слышал что-то об использовании «страниц» для достижения этого, но я не знаю, является ли это лучшим способом. Я google это, но продолжает давать мне результаты iOS.Mac OSX: Каков наилучший способ разбивки на страницы для загрузки большего количества данных для NSTableView?

P.S. Я буду признателен, если вы предоставили визуальные и примеры кода, чтобы я мог лучше понять.

Редактировать: Я вижу этот фрагмент кода в Интернете. Наверное, я могу реализовать что-то подобное, чтобы загружать сразу несколько данных за раз. Извлечение данных может захватить следующие 100 данных для каждой страницы.

@interface ViewController : NSObject { 
    NSTableView *tableView; 
    NSMutableArray *mDataSource; 
    NSInteger mPageNumber; 
    NSInteger mTotalPage; 
} 
-(IBAction)nextPage : (id)sender;//for next page 
-(IBAction)prevPage : (id)sender;// for prev. page 
-(void)fetchData; 
@property (assign) IBOutlet NSTableView *tableView; 
@end 
#import "ViewController.h" 


@implementation ViewController 
@synthesize tableView; 
- (id) init 
{ 
    self = [super init]; 
    if (self != nil) { 
     mDataSource = [[NSMutableArray alloc] init]; 
     mPageNumber=0; 
     mTotalPage =2;// total numer of pages 
     [self fetchData]; 
    } 
    return self; 
} 


-(IBAction)nextPage : (id)sender; 
{ 
    ++mPageNumber; 
    if (mTotalPage<=mPageNumber) { 
     mPageNumber=0;// point to first page 
    } 
    [self fetchData]; 

} 
-(IBAction)prevPage : (id)sender; 
{ 
    --mPageNumber; 
    [self fetchData]; 
} 

-(void)fetchData; 
{ 
    [tableView setDataSource:nil]; 
    NSString *lDataSourcePath = [[NSString alloc] initWithFormat:@"/page%d",mPageNumber]; 
    NSArray *lDataSource = [[NSArray alloc] initWithContentsOfFile:lDataSourcePath]; 
    [mDataSource setArray:lDataSource]; 
    [lDataSource release]; 
    [lDataSourcePath release]; 
    [tableView setDataSource:self]; 
    [tableView reloadData]; 
} 
-(void)dealloc 
{ 
    [mDataSource release]; 
    [super dealloc]; 
} 

#pragma mark Data Source 
- (NSInteger)numberOfRowsInTableView:(NSTableView *)aTableView 
{ 
    return [mDataSource count]; 
} 

- (id)tableView:(NSTableView *)aTableView objectValueForTableColumn:(NSTableColumn *)aTableColumn row:(NSInteger)rowIndex 
{ 
    return [mDataSource objectAtIndex:rowIndex]; 
} 

@end 
+1

примеры визуального и кода -> и у вас платят за это;) nice try –

+0

Здесь вы должны начать https://developer.apple.com/library/mac/samplecode/iSpend/Introduction/Intro.html# // apple_ref/doc/uid/DTS10003625 Если окно растягивает tableview, запрашивает больше данных. Вы можете запрограммировать прокрутку, если вам нужно, и tableview запросит больше данных. –

ответ

0

Другие отклонили и проголосовали, чтобы закрыть этот вопрос, потому что он (поистине) слишком расплывчатый. Также кажется, что вы спрашиваете о двух разных вещах: 1) Как разбивать ваш источник данных так, чтобы в таблице отображалась только страница данных за раз и 2) Как справиться с этим в пользовательском интерфейсе.

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

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

Например, «Вытягивание сверху вниз для обновления» может просто перезагрузить данные, а не добавлять к нему (это не значит «разбиение на страницы», просто «обновленная информация»). Однако это можно было бы использовать для загрузки данных «предыдущей страницы». Потяните достаточно сильно, и он переместится на предыдущую страницу (и пользователи окажутся внизу нижней страницы). Доведите до конца и достаточно сильно потяните, и загрузится следующая страница (пользователи попадают в верхнюю часть списка прокрутки следующей страницы). Есть десятки примеров с открытым исходным кодом (поиск Github), которые показывают вам, как сделать перетаскивание на Mac. Это может быть легко адаптировано для этой цели.

Другим примером может быть добавление записи «load next/prev x» вверху и внизу источника данных, где это необходимо. Очевидно, что первая страница не имела бы «load previous x», а на последней странице не было бы записей «load next x», поскольку вы находитесь в начале/конце. Если ваш «размер страницы» составляет 100 строк, и у вас есть более 100 строк данных, тогда ваша первая страница будет содержать 101 общую строку (но последняя - это кнопка, которая говорит «загрузить еще 100 ...»). Нажатие этой последней строки ведет себя как предыдущий пример, который я дал. Если вы находитесь в «середине» (вы можете загрузить 100 prev и 100 next), вашей таблице дается 102 строки (первое и последнее - это навигационные элементы управления); если в конце, назад к 101, но кнопка nav - первая строка в вашей таблице.

Другим примером может быть устранение этого вообще и управление страницей на панели инструментов, возможно, сегментированный элемент управления с первой/предыдущей/следующей, следующей, последней кнопками: [| < < (101-200)>> | ] ... сегмент позиции (который показывает диапазон страницы) можно щелкнуть, и вы можете указать размер страницы и/или перейти непосредственно к странице, введя ее.

Приведенные выше примеры иллюстрируют, почему ваш вопрос далеко слишком расплывчато, чтобы ответить. Я рекомендую вам начать новый вопрос для части пользовательского интерфейса (с очень конкретными подробностями о характере данных и тем, что ваши пользователи будут делать с ним и т. Д.). При необходимости запустите отдельный вопрос о том, как создать собственный источник данных, который позволяет разбивать страницы на данные.Опять же, будьте очень конкретны в отношении характера данных, откуда они исходят, и т. Д., Как я упоминал выше. Без этой информации вы сможете получить неясные ответы (хотя более конкретные ответы на неопределенные вопросы означают, что ответчик сделал некоторые предположения и может в конечном итоге ввести вас в замешательство). Поэтому всегда будьте конкретны.

Надеюсь, это поможет.

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