2013-02-19 52 views
0

我有一个NSTableView其中1000+行。现在我想为它添加分页,并在一个视图中添加100的限制,然后放置返回和下一步按钮以查看下一个数据。对于可可中的NSTableview分页

我是新来的这种可可开发。 任何人都可以帮助我解决这个问题。

+0

在NSTableViewDataSource中实现分页。 – 2013-02-19 08:06:40

回答

1

将您的数据存储在文件中。 (page0,page1 ..)

/* page0 <?xml version="1.0" encoding="UTF-8"?> 
    <!DOCTYPE plist PUBLIC "-//Apple//DTD PLIST 1.0//EN" "http://www.apple.com/DTDs/PropertyList-1.0.dtd"> 
    <plist version="1.0"> 
    <array> 
     <string>/Volumes/Drop Box</string> 
     <string>/Volumes/Backup</string> 
     <string>/Users/Music</string> 
    </array> 
    </plist>*/ 

#import <Cocoa/Cocoa.h> 


@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