Описание: создание электронной таблицы, использующей заданные источник и прокси-источник данных.
#import "ProxyDataSource.h"
#import "DataSource.h"
#import "NuMenu.h"
#import "LinearGradientBrush.h"
#import "RadialGradientBrush.h"
#import "GradientStop.h"
@interface ViewController : UIViewController<NuGridDelegate, UIPopoverControllerDelegate, NuMenuDelegate, NuGridActionDelegate> {
DataSource *datasource; // Источник данных
ProxyDataSource *proxyDatasource; // Прокси-источник данных
NuGridController *contr; // Менеджер таблицы
NSInteger colWidth; // Ширина столбцов таблицы
NSInteger rowHeight; // Высота строк таблицы
UIPopoverController *popover; // Всплывающее окно для меню
}
// Выполняет пользовательский пример, размещённый в теле данного метода
- (void) executeExample;
@end
#import "ViewController.h"
#import <NuGridView/NuGridController.h>
#import <NuGridView/NuTextGridCell.h>
#import <NuGridView/NuGridGradientBrush.h>
#import <NuGridView/NuGridLinearGradientBrush.h>
#import <NuGridView/NuGridRadialGradientBrush.h>
#import <NuGridView/NuGridSolidColorBrush.h>
#import <NuGridView/NuGridCellImage.h>
#import <NuGridView/NuGridImageTextCell.h>
#import <NuGridView/NuGridExpandableCell.h>
#import "NuMenuController.h"
#import "SparklineCell.h"
#import "CustomCell.h"
@implementation ViewController
- (void)viewDidLoad
{
[super viewDidLoad];
// Создаём источник данных
datasource = [[DataSource alloc] init];
// Создаём прокси-источник данных
proxyDatasource = [[ProxyDataSource alloc] init];
// Для прокси-источника данных устанавливаем ссылку на источник данных
[proxyDatasource setDataSource:datasource];
// Создаём объект, отвечающий за управление таблицей
contr = [[NuGridController alloc] init];
// Устанавливаем cсылку на прокси-источник данных
[contr setDataSource:proxyDatasource];
// Устанавливаем объект для управления базовой функциональностью таблицы
[contr setDelegate:self];
// Устанавливаем объект для выполнения различных действий с таблицей
[contr setActionDelegate:self];
// Разрешаем сортировку
[contr setCanSort:YES];
// Разрешаем использование фиксированных строк и столбцов
[contr setCanFix:YES];
[contr setDockable:YES];
// Определяем цвет и толщину горизонтальной разделительной линии
[contr setHorizontalSeparateLineColor:[UIColor redColor]];
[contr setHorizontalSeparateLineSize:2];
// Определяем цвет и толщину вертикальной разделительной линии
[contr setVerticalSeparateLineColor:[UIColor redColor]];
[contr setVerticalSeparateLineSize:2];
// Определяем значки поворотов таблицы
[contr setFullRotationGestureImage:[UIImage imageNamed:@"full_gesture.png"]];
[contr setHalfRotationGestureImage:[UIImage imageNamed:@"half_gesture.png"]];
// Разрешаем отображение значков поворотов таблицы
[contr setShowRotatingImages:YES];
// Запрещаем обрабатывать события, связанные с обновлением источника данных
[contr setSendEventBeforeAndAfterDataSourceUpdate: NO];
// Устанавливаем ширину столбцов
colWidth = 80;
// Устанавливаем высоту строк
rowHeight = 50;
// Создаём тему оформления таблицы
NuGridTheme *simpleTheme = [[NuGridTheme new] autorelease];
// Создаём стиль для заголовков
NuGridCellStyle *headerStyle = [[NuGridCellStyle new] autorelease];
// Определяем цвет фона
[headerStyle setBackgroundColor:[UIColor
colorWithRed:0.90 green:0.91 blue:0.96 alpha:1]];
// Определяем тип и размер шрифта
[headerStyle setFont:[UIFont fontWithName:@"Arial" size:14]];
[headerStyle setTextColor:[UIColor whiteColor]];
// Устанавливаем выравнивание текста по центру
[headerStyle setTextAlignment:UITextAlignmentCenter];
[headerStyle setLineBreakMode:UILineBreakModeWordWrap];
[headerStyle setTextColor:[UIColor blackColor]];
[headerStyle setStyleName:@"Стиль для заголовков таблицы"];
[headerStyle setHighlightTextColor:[UIColor yellowColor]];
// Добавляем стиль в тему оформления
[simpleTheme setDefaultRowHeaderStyle:headerStyle];
[simpleTheme setDefaultColumnHeaderStyle:headerStyle];
// Определяем стиль для остальных ячеек таблицы по умолчанию
NuGridCellStyle *cellStyle = [NuGridCellStyle deafultStyle];
// Удаляем изображения, используемые свёрнутым и раскрытым экспандером
[cellStyle removeExpandedImage];
[cellStyle removeCollapsedImage];
[cellStyle setExpanderImageMargin:0];
// Устанавливаем стиль по умолчанию
[simpleTheme setDefaultStyle:cellStyle];
// Устанавливаем стили таблицы
[proxyDatasource gridView:(NuGridView *)[contr view] setTheme:simpleTheme];
// Выполняем пользовательский пример
[self executeExample];
// Добавляем созданную таблицу в приложение
[self.view addSubview:[contr gridView]];
}
// Выполняет пользовательский пример, размещённый в теле данного метода
-(void) executeExample {
};
- (void)viewDidAppear:(BOOL)animated
{
[super viewDidAppear:animated];
[contr.gridView setFrame:self.view.frame];
}
// Обрабатывает событие выбора пункта меню
- (void) nuMenu:(NuMenu *)menu selectedItem:(int)itemRow {
UIMenuItem *item = [[menu items] objectAtIndex:itemRow];
[[[contr gridView] gridDelegate] performSelector:item.action withObject:item];
[self dismissPopover];
}
- (void) nuMenuCanceled:(NuMenu *)menu
{
[self dismissPopover];
}
// Удаляет всплывающее окно в таблице
- (void) dismissPopover {
[popover dismissPopoverAnimated:YES];
[popover release];
popover = nil;
if ([[contr gridView] respondsToSelector:@selector(setScrollEnabled:)]) {
[(UIScrollView *)[contr gridView] setScrollEnabled:YES];
}
};
- (void)didReceiveMemoryWarning
{
[super didReceiveMemoryWarning];
}
// Реализует возможность автоматического измененения ориентации экрана
- (BOOL)shouldAutorotateToInterfaceOrientation:(UIInterfaceOrientation)interfaceOrientation
{
NuGridView *view = contr.gridView;
CGRect frame;
if(interfaceOrientation == UIInterfaceOrientationPortrait)
frame = CGRectMake(0, 0, self.view.frame.size.width, self.view.frame.size.height);
else
frame = CGRectMake(0, 0, self.view.frame.size.height, self.view.frame.size.width);
view.frame = frame;
return YES;
}
// Возвращает ширину столбца
- (double)gridView:(NuGridView *)gridView widthForColumn:(NSInteger)columnNumber
{
return colWidth;
}
// Возвращает высоту строки
- (double) gridView:(NuGridView *)gridView heightForRow:(NSInteger)rowNumber
{
return rowHeight;
}
// Возвращает высоту заголовков столбца
-(double) gridView:(NuGridView *)gridView heightForHeaderColumnWithNumber:(NSInteger)number
{
return 50 / 1.5;
}
// Возвращает ширину заголовков строки
- (double) gridView:(NuGridView *)gridView widthForHeaderRowWithNumber:(NSInteger)number
{
return 80 / 1.5;
}
// Возвращает признак того, что столбец фиксированный
- (BOOL)gridView:(NuGridView *)gridView isColumnWithIndexFixed:(NSInteger)columnIndex
{
return NO;
}
// Возвращает признак того, что строка фиксированная
- (BOOL)gridView:(NuGridView *)gridView isRowWithIndexFixed:(NSInteger)rowIndex
{
return NO;
}
@end
См. также: