Applying Rule-Based Conditional Formatting (Example 1)

Operating system requirements: iOS 5.0 or later.

Mobile device: iPad.

Description

This example describes conditional formatting setup for the whole table based on the rule "Value between A and B".

Source Code

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):

MAExpressAnalysisReportViewController *contr = (MAExpressAnalysisReportViewController *)m_controller;
// Get array of data view controllers
NSArray *controllers =[contr dataViewControllers];
// Initialize rule-based conditional formatting settings
MAConditionalFormattingRules *rules = [[MAConditionalFormattingRules new] autorelease];
// Declare helper for working with conditional formatting settings
MAConditionalFormattingHelper *formattingHelper = nil;
// Determine values of A and B
double valueA = 7000;
double valueB = 8000;
// 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 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 *gridView = (NuGridView *)subview;
                // Get table delegate
                MAGridDelegate *delegate = (MAGridDelegate*)[gridView gridDelegate];
                // Get proxy data source
                MAGridProxyDataSource *proxyDatasource = (MAGridProxyDataSource*)[delegate proxyDataSource];
                
                // Create a conditional formatting rule
                MAConditionalFormattingRule *formattingRule = [[MAConditionalFormattingRule new] autorelease];
                [formattingRule setValueA: valueA];
                [formattingRule setValueB: valueB];
                // |Set fill color for cells that satisfy the rule
                [formattingRule setColor: [UIColor colorWithRed:1 green:0.77 blue:0.27 alpha:1]];
                // Use absolute numeric values
                [formattingRule setValueFormat: kCFRVFNumber];
                // Use the rule "value between A and B"
                [formattingRule setType: kCFRTBetween];
                // Mark created rule as active
                [formattingRule setActive: YES];
                
                // Get the rule "Value between A and B"
                MAConditionalFormattingRule *betweenRule = [rules ruleByType: kCFRTBetween];
                // Merge rules
                [betweenRule merge: formattingRule];
                
                // Create a basic helper for working with conditional formatting settings
                formattingHelper = [[MAConditionalFormattingHelper alloc] initWithProxyDataSource: proxyDatasource];
                // Apply conditional formatting settings to the whole table
                [formattingHelper applyGlobalConditionalFormat: rules];
            }
        }
    }
}

After executing the example the conditional formatting with the use of the rule "Cells between A and B" is applied to the express report whole table. All the cells containing values from 7000 to 8000 are filled with yellow color:

Deactivate the applied rule. To do this, add the following script to the example:

// Disable all the rules
[rules turnAllInactive];
// Apply new conditional formatting settings
[formattingHelper applyGlobalConditionalFormat: rules];

After executing the example the express report table is restored to its initial view.

See also:

Example of Component Use