Operating system requirements: iOS 5.0 or later.
Mobile device: iPad.
This example describes some methods of working with persisted keys of table rows and columns. After starting the example the following operations are executed:
An express report data view controller is created.
Persisted keys are merged for specified row and column.
Table cell is searched and selected by merged persisted key.
Executing the example requires to place the following code in the body of the executeExample method of the ViewController class (see the Displaying of Express Report section):
// Get array of data view controllers
NSArray *controllers =[m_controller dataViewControllers];
// Parse data view controllers in cycle
for(NSObject *controller in controllers)
{
// Check if the current controller is a table data view controller
if([controller isMemberOfClass:[MAGridDataViewController class]])
{
// Get table data view controller object
MAGridDataViewController *gridController = (MAGridDataViewController *)controller;
// Get table data source
GridDataViewDatasource *grid = [gridController gridDatasource];
// Get row persisted key
MAGridDataSourcePersistentKey *rowPersistentKey = [grid rowPersistentKeyByNumber:1];
// Get column persisted key
MAGridDataSourcePersistentKey *columnPersistentKey = [grid columnPersistentKeyByNumber:1];
// Get copy of column persisted key
id<MAGridDataSourcePersistentKeyProtocol> persistentKey = [columnPersistentKey copyWithZone:[columnPersistentKey zone]];
// Merge copy of column persisted key with row persisted key
[persistentKey joinWith:rowPersistentKey];
// Call cell selection method
[self setSelectionForKey:persistentKey];
break;
}
}
Then it is required to add the following method with its implementation in the ViewController class:
// Selects table cell
-(void) setSelectionForKey: (id<MAGridDataSourcePersistentKeyProtocol>)key
{
// Get array of data view controllers
NSArray *controllers =[m_controller dataViewControllers];
// Parse data view controllers in cycle
for(NSObject *controller in controllers)
{
// Check if the current controller is a table data view controller
if([controller isMemberOfClass:[MAGridDataViewController class]])
{
// Get table data view controller object
MAGridDataViewController *gridController = (MAGridDataViewController *)controller;
// Get table data source
GridDataViewDatasource *grid = [gridController gridDatasource];
// Get controller view
UIView *view = [gridController view];
// Get array of subviews
NSArray *subviews = [view subviews];
// Parse subviews in cycle
for(NSObject *subview in subviews)
{
// Check if the current view is a table view
if([subview isMemberOfClass:[NuGridView class]])
{
// Get table view object
NuGridView *gView = (NuGridView *)subview;
// Get number of table columns
int columnCount = [grid gridViewColumnCount:gView];
// Get number of table rows
int rowCount = [grid gridViewRowCount:gView];
// Parse table rows in cycle
for(int i = 0; i < rowCount; i++)
{
// Parse table columns in cycle
for(int j = 0; j < columnCount; j++)
{
// Get row persisted key
MAGridDataSourcePersistentKey *rowPersistentKey = [grid rowPersistentKeyByNumber:i];
// Get column persisted key
MAGridDataSourcePersistentKey *columnPersistentKey = [grid columnPersistentKeyByNumber:j];
// Get copy of column persisted key
id<MAGridDataSourcePersistentKeyProtocol> persistentKey = [columnPersistentKey copyWithZone:[columnPersistentKey zone]];
// Merge copy of column persisted key with row persisted key
[persistentKey joinWith:rowPersistentKey];
// Check if obtained persisted key is equal to specified key
if([persistentKey isEqual:key])
{
// Select cell and finish method execution
[[gView controller] selectAreaFromRow:[gView rowWithNumber:i] column:[gView columnWithNumber:j] toRow:[gView rowWithNumber:i] column:[gView columnWithNumber:j]];
return;
}
}
}
}
}
}
}
}
After executing the example the mobile device screen displays the express report containing a table, in which one of cells is selected:

See also: