Таблицы и с чем их едят

| Комментариев: 3 | Нет трекбэков
Итак, сегодняшний пример - это работа с таблицами. Самое главное, что стоит отметить про таблицы - это их ячейки. Существует несколько типов ячеек, но в своём примере я использую самый простой тип - UISimpleTableCell. У этой ячейки есть свойство title (текст), которое я использую в данном примере. Поехали.
Info.plist
<plist version="1.0">
<dict>
	<key>CFBundleDevelopmentRegion</key>
	<string>Russian</string>
	<key>CFBundleExecutable</key>
	<string>Tables</string>
	<key>CFBundleIdentifier</key>
	<string>com.wndev.tables</string>
	<key>CFBundleInfoDictionaryVersion</key>
	<string>6.0</string>
	<key>CFBundlePackageType</key>
	<string>APPL</string>
	<key>CFBundleSignature</key>
	<string>????</string>
	<key>CFBundleVersion</key>
	<string>0.1</string>
</dict>
</plist>
main.m
#import <Foundation/Foundation.h>
#import "TablesApp.h"

int main(int argc, char *argv[])
{
    NSAutoreleasePool *pool = [[NSAutoreleasePool alloc] init];
    int ret = UIApplicationMain(argc, argv, [TablesApp class]);
    [pool release];
    return ret;
}
TablesApp.h
#import <CoreFoundation/CoreFoundation.h>
#import <Foundation/Foundation.h>
#import <CoreGraphics/CGEventTypes.h>
#import <GraphicsServices/GraphicsServices.h>
#import <UIKit/CDStructures.h>
#import <UIKit/UIKit.h>
#import <UIKit/UISimpleTableCell.h>

@interface TablesApp : UIApplication
{
	UIWindow *mainWindow;
	UIView *mainView;
	UITable *m_table;
}

- (void)showAlertSheet:(int)row;

@end
TablesApp.m
#import "TablesApp.h"

@implementation TablesApp

- (void)applicationDidFinishLaunching:(GSEventRef)event;
{
	struct CGRect frame = [UIHardware fullScreenApplicationContentRect];
	frame.origin.x = frame.origin.y = 0.0;
    
	mainWindow = [[UIWindow alloc] initWithContentRect:frame];
	mainView = [[UIView alloc] initWithFrame:frame];

	m_table = [[UITable alloc] initWithFrame:
		CGRectMake(0.0f, 0.0f, 320.0f, 480.0f)];
	UITableColumn *col = [[UITableColumn alloc] initWithTitle: @"Column"
		identifier:@"column" width:480.0f];
	
	[m_table addTableColumn:col];
	[col release];
	[mainView addSubview:m_table];
	[m_table setSeparatorStyle:1];
	[m_table setDelegate:self];
	[m_table setDataSource:self];
	[m_table setTapDelegate:self];
	[m_table reloadData];

	[mainWindow setContentView:mainView];
	[mainWindow orderFront:self];
	[mainWindow makeKey:self];
}

- (UITableCell *)table:(UITable *)table cellForRow:(int)row column:(UITableColumn *)col
{
	UISimpleTableCell *cell = [[UISimpleTableCell alloc] init];
	[cell setTitle:[NSString stringWithFormat:
		[NSString stringWithUTF8String:"Ряд номер %d"],row]];

	return [cell autorelease];
}

- (void)tableRowSelected:(NSNotification *)notification
{
	UITable *table = [notification object];
	int row = [table selectedRow];
	[self showAlertSheet:row];
	UISimpleTableCell *cell = [table cellAtRow:row column:0];
	[cell setSelected:FALSE withFade:TRUE];
}

- (void)showAlertSheet:(int)row
{
	UIAlertSheet *alert = [[UIAlertSheet alloc] init];
	[alert setTitle:@"Table has been clicked!"];
	[alert setBodyText:[NSString stringWithFormat:@"Row %d selected!", row]];
	[alert addButtonWithTitle:@"OK"];
	[alert setDelegate:self];
	[alert setContext:self];
	[alert popupAlertAnimated:YES];
}

- (int)numberOfRowsInTable:(UITable *)table
{
	return 10;
}

- (void)alertSheet:(UIAlertSheet *)sheet buttonClicked:(int)button
{
	[sheet dismiss];
}

- (void)applicationWillTerminate;
{
	[m_table release];
	[mainView release];
	[mainWindow release];
}

@end
Makefile
PRODUCT_NAME = Tables
BUNDLE_NAME = $(PRODUCT_NAME).app
SOURCES = $(wildcard *.m)
INFOPLIST_FILE = Info.plist
PNGS = $(wildcard *.png)

CC = arm-apple-darwin-gcc
CXX = arm-apple-darwin-g++

CFLAGS = -Wall -pipe -O3

LD = ${CC}
LDFLAGS = -Wl,-syslibroot,/usr/local/share/iphone-filesystem \
          -I/usr/local/arm-apple-darwin/include \
          -lobjc \
          -larmfp \
          -framework CoreFoundation \
          -framework Foundation \
          -framework CoreGraphics \
          -framework GraphicsServices \
          -framework UIKit

EXECUTABLE_NAME = $(PRODUCT_NAME)

OBJECTS = \
    $(patsubst %.c,%.o,$(filter %.c,$(SOURCES))) \
    $(patsubst %.cc,%.o,$(filter %.cc,$(SOURCES))) \
    $(patsubst %.cpp,%.o,$(filter %.cpp,$(SOURCES))) \
    $(patsubst %.m,%.o,$(filter %.m,$(SOURCES))) \
    $(patsubst %.mm,%.o,$(filter %.mm,$(SOURCES)))

all: $(PRODUCT_NAME) bundle

$(PRODUCT_NAME): $(OBJECTS)
	$(LD) $(LDFLAGS) -o $(PRODUCT_NAME) $(OBJECTS)

%.o: %.m
	$(CC) $(CFLAGS) $(CPPFLAGS) -c $< -o $@

clean:
	rm -f *.o $(EXECUTABLE_NAME)
	rm -rf $(BUNDLE_NAME)
	rm -f *~

bundle:
	mkdir -p $(BUNDLE_NAME)
	cp $(INFOPLIST_FILE) $(BUNDLE_NAME)/
	cp $(PNGS) $(BUNDLE_NAME)/
	cp $(EXECUTABLE_NAME) $(BUNDLE_NAME)/
	cp PkgInfo $(BUNDLE_NAME)/
Качаем исходники тут: tables.zip

Нет трекбэков

URL для трекбэков: http://weho.ru/cgi-bin/mt/mt-tb.cgi/71

Комментариев: 3

Поправьте в Info.list:
Hello
на
Tables

Спасибо за то что делаете. Только хотелось бы более подробный туториал - это для тех кто начинает все с нуля. А для тех кто уже знаком с языком можно выкладывать исходники. А так без поддробных коментов просто листинги когда.

Спасибо за ваши труды, можно ли вас попросить оставить комментарии к коду, где и что происходит.
Заранее благодарен.

PS: Интересно было бы увидеть способ реализации загиба страницы как в приложении Maps.

Комментировать

Об этой записи

Сообщение опубликовано 04.05.2008 18:52. Автор — Narmo.

Предыдущая запись — Cydia vs Installer.app

Следующая запись — Модуль для MD5 в iPhone

Смотрите новые записи на главной странице или загляните в архив, где есть ссылки на все сообщения.

Работает на Movable Type 5.01
Хороший хостинг