beginning iphone 4_devlopement_chpter7_tab_b

70

Upload: jihoon-kong

Post on 20-Jun-2015

379 views

Category:

Technology


3 download

TRANSCRIPT

Page 1: Beginning iphone 4_devlopement_chpter7_tab_b
Page 2: Beginning iphone 4_devlopement_chpter7_tab_b

순서

1. 피커 (Picker), 탭바 (Tab bar) 란 ?

2. 앞으로 만들어볼 녀석들

3. 메인 탭바의 구성을 만들자 .

4.  탭별 콤포넌트를 만들자 .

Page 3: Beginning iphone 4_devlopement_chpter7_tab_b

1. 피커 (Picker), 탭바 (Tab bars) 란 ?

 

Page 4: Beginning iphone 4_devlopement_chpter7_tab_b

(1)  피커

회전하는 다이얼이 들어있는 컨트롤 .

(2) 탭바

하단에 버튼 영역 고정시켜 놓고 버튼을 선택함으로써 컨텐츠 영역을 바꾸는 컨트롤

Page 5: Beginning iphone 4_devlopement_chpter7_tab_b

2. 앞으로 만들어 볼 것들

 

Page 6: Beginning iphone 4_devlopement_chpter7_tab_b
Page 7: Beginning iphone 4_devlopement_chpter7_tab_b

DatePicker

Page 8: Beginning iphone 4_devlopement_chpter7_tab_b

SinglePicker

Page 9: Beginning iphone 4_devlopement_chpter7_tab_b

DoubePicker

Page 10: Beginning iphone 4_devlopement_chpter7_tab_b

3. 메인 탭바의 구성을 만들자 .

 

Page 11: Beginning iphone 4_devlopement_chpter7_tab_b

DependentPicker

Page 12: Beginning iphone 4_devlopement_chpter7_tab_b

CustomPicker

Page 13: Beginning iphone 4_devlopement_chpter7_tab_b

 - 개발 시나리오

(1) 다섯개의 탭이 들어가도록 기본 탭바를 만든다 .(2) 탭바에 아이콘 추가(3) 데이트피커 , 단일 컴포넌트 피커 , 멀티 컴포넌트 피커 , 의존컴포넌트를 활용한 피커 ,  이미지를 활용한 커스컴피커를 각 탭마다 추가한다 .

Page 14: Beginning iphone 4_devlopement_chpter7_tab_b

1. 프로젝트 명 Picker 로 생성2. Group & files panel 최상단 폴더 선택후 command + n 클릭3.

Page 15: Beginning iphone 4_devlopement_chpter7_tab_b

파일생성 및 각파일 생성 및 추가

그대로 next 하고 다음창도 next 저장할 이름은 "DatePickerViewController" 로 저장 .

그러면 확장자가 h,m,xib 파일 자동생성

이런식으로

SingleComponentPickerViewControllerDoubleComponentPickerViewControllerDependentComponentPickerViewControllerCustomPickerViewController 

추가생성

supporting files 폴더 선택후 command+option+a 후image,icon,music 파일 , 사전파일 import

Page 16: Beginning iphone 4_devlopement_chpter7_tab_b

PickersAppDelegate.h

#import <UIKit/UIKit.h>@interface PickersAppDelegate : NSObject <UIApplicationDelegate> {     UIWindow *window;     UITabBarController *rootController;}

@property (nonatomic, retain) IBOutlet UIWindow *window;@property (nonatomic, retain) IBOutlet UITabBarController *rootController;@end

Page 17: Beginning iphone 4_devlopement_chpter7_tab_b

PickersAppDelegate.m

#import "PickersAppDelegate.h"@implementation PickersAppDelegate @synthesize window; @synthesize rootController;

- (BOOL)application:(UIApplication *)application didFinishLaunchingWithOptions:(NSDictionary *)launchOptions {}

// Override point for customization after app launch[self.window addSubview:rootController.view];[self.window makeKeyAndVisible];return YES;

- (void)dealloc {}@end[rootController release];[window release];[super dealloc];

Page 18: Beginning iphone 4_devlopement_chpter7_tab_b

MainWindow.xib 수정

Page 19: Beginning iphone 4_devlopement_chpter7_tab_b
Page 20: Beginning iphone 4_devlopement_chpter7_tab_b
Page 21: Beginning iphone 4_devlopement_chpter7_tab_b

나머지도 이미지를 추가해서 아이콘 변경

Page 22: Beginning iphone 4_devlopement_chpter7_tab_b

4. 탭별 콤포넌트를 만들자 .

 

Page 23: Beginning iphone 4_devlopement_chpter7_tab_b

(1) 프로그래밍 순서

1. 콤포넌트 .h 파일에 컴포넌트 IBOutlet 과 Properties(getter,setter), IBAction  를 만든다 .

2. (1) Interface Builder 를 통해서 View 에 하위 콤포넌트     (Picker,Button) 들을 등록    (2) Picker 를 Files Owner 의 IBOutlet 와 연결한다 .      (3) Button 에 action 을 등록하고 그것을 Files Owner 의    IBAction 과 연결한다 .

3. 콤포넌트 .m 파일에 컨트롤러 로직을 작성한다 .

간략하게 콤포넌트 .h -> Interface Builder - > 콤포넌트 .m

Page 24: Beginning iphone 4_devlopement_chpter7_tab_b

DatePickerView 를 만들어 봅시다 .

 

Page 25: Beginning iphone 4_devlopement_chpter7_tab_b

- DatePickerViewController.h

#import <UIKit/UIKit.h> @interface DatePickerViewController : UIViewController {    UIDatePicker *datePicker;}@property (nonatomic, retain) IBOutlet UIDatePicker *datePicker; - (IBAction)buttonPressed; @end

Page 26: Beginning iphone 4_devlopement_chpter7_tab_b

DataPickerViewController.xib 를 선택해서 interfaceBuilder 를 연다 .

Page 27: Beginning iphone 4_devlopement_chpter7_tab_b
Page 28: Beginning iphone 4_devlopement_chpter7_tab_b

ctrl +  files'owner 선택 드래그 해서 datePicker 컴포넌트에 드랍

Page 29: Beginning iphone 4_devlopement_chpter7_tab_b

버튼 더블클릭해서 이름 press로 명명

버튼을 누르면IBAction 함수가 호출되도록

Page 30: Beginning iphone 4_devlopement_chpter7_tab_b

- DatePickerViewController.m

#import "DatePickerViewController.h"@implementation DatePickerViewController@synthesize datePicker;- (IBAction)buttonPressed {     NSDate *selected = [datePicker date];     NSString *message = [[NSString alloc] initWithFormat:       @"The date and time you selected is: %@", selected];     UIAlertView *alert = [[UIAlertView alloc]initWithTitle:@"Date and Time Selected"                                                    message:message                                   delegate:nil cancelButtonTitle:@"Yes, I did."                                   otherButtonTitles:nil];       [alert show];        [alert release];        [message release];}

Page 31: Beginning iphone 4_devlopement_chpter7_tab_b

 - (void)viewDidLoad {    NSDate *now = [[NSDate alloc] init];    [datePicker setDate:now animated:NO];     [now release];}- (void)viewDidUnload {     [super viewDidUnload];     self.datePicker = nil;}- (void)dealloc {    [datePicker release];    [super dealloc];}

Page 32: Beginning iphone 4_devlopement_chpter7_tab_b

버튼 클릭

Page 33: Beginning iphone 4_devlopement_chpter7_tab_b

SinglePickerView 를 만들어 봅시다 .

 

Page 34: Beginning iphone 4_devlopement_chpter7_tab_b

- SingleComponentPickerViewController.h

#import <UIKit/UIKit.h>@interface SingleComponentPickerViewController : UIViewController<UIPickerViewDelegate, UIPickerViewDataSource> {     UIPickerView *singlePicker;    NSArray *pickerData; }@property (nonatomic, retain) IBOutlet UIPickerView *singlePicker; @property (nonatomic, retain) NSArray *pickerData; - (IBAction)buttonPressed; @end

Page 35: Beginning iphone 4_devlopement_chpter7_tab_b

SinglePickerViewController.xib 를 선택해서 interfaceBuilder 를 연다 .

Page 36: Beginning iphone 4_devlopement_chpter7_tab_b
Page 37: Beginning iphone 4_devlopement_chpter7_tab_b

ctrl +  files'owner 선택 드래그 해서 singlePicker 컴포넌트에 드랍

Page 38: Beginning iphone 4_devlopement_chpter7_tab_b

버튼 더블클릭해서 이름 press로 명명

버튼을 누르면IBAction 함수가 호출되도록

Page 39: Beginning iphone 4_devlopement_chpter7_tab_b

- SingleComponentPickerViewController.m

#import "SingleComponentPickerViewController.h"@implementation SingleComponentPickerViewController@synthesize singlePicker; @synthesize pickerData;- (IBAction)buttonPressed {    NSInteger row = [singlePicker selectedRowInComponent:0];     NSString *selected = [pickerData objectAtIndex:row];     NSString *title = [[NSString alloc] initWithFormat:@"You selected %@!", selected];                                    UIAlertView *alert = [[UIAlertView alloc] initWithTitle:title                                      message:@"Thank you for choosing."                                       delegate:nil                                      cancelButtonTitle:@"You're Welcome"                                                       otherButtonTitles:nil];

    [alert show];     [alert release];     [title release];}

Page 40: Beginning iphone 4_devlopement_chpter7_tab_b

- (void)viewDidLoad {    NSArray *array = [[NSArray alloc] initWithObjects:@"Luke", @"Leia",  @"Han", @"Chewbacca", @"Artoo", @"Threepio", @"Lando", nil];    self.pickerData = array;    [array release];}

- (void)viewDidUnload {    [super viewDidUnload];    // Release any retained subviews of the main view.    // e.g. self.myOutlet = nil;    self.singlePicker = nil;    self.pickerData = nil;}

- (void)dealloc {    [singlePicker release];    [pickerData release];    [super dealloc];}

Page 41: Beginning iphone 4_devlopement_chpter7_tab_b

#pragma mark -#pragma mark Picker Data Source Methods- (NSInteger)numberOfComponentsInPickerView:(UIPickerView *)pickerView {    return 1;}- (NSInteger)pickerView:(UIPickerView *)pickerViewnumberOfRowsInComponent:(NSInteger)component {    return [pickerData count];}#pragma mark Picker Delegate Methods- (NSString *)pickerView:(UIPickerView *)pickerViewtitleForRow:(NSInteger)rowforComponent:(NSInteger)component {    return [pickerData objectAtIndex:row];}

Page 42: Beginning iphone 4_devlopement_chpter7_tab_b

버튼클릭

Page 43: Beginning iphone 4_devlopement_chpter7_tab_b

DoublePickerView 를 만들어 봅시다 .

 

Page 44: Beginning iphone 4_devlopement_chpter7_tab_b

- DoubleComponentPickerViewController.h

#import <UIKit/UIKit.h>#define kFillingComponent 0#define kBreadComponent   1@interface DoubleComponentPickerViewController : UIViewController<UIPickerViewDelegate, UIPickerViewDataSource>{    UIPickerView *doublePicker;    NSArray *fillingTypes;    NSArray *breadTypes;}@property(nonatomic, retain) IBOutlet UIPickerView *doublePicker; @property(nonatomic, retain) NSArray *fillingTypes;@property(nonatomic, retain) NSArray *breadTypes;-(IBAction)buttonPressed;@end

Page 45: Beginning iphone 4_devlopement_chpter7_tab_b

- DoubleComponentPickerViewController.m

#import "DoubleComponentPickerViewController.h"@implementation DoubleComponentPickerViewController@synthesize doublePicker; @synthesize fillingTypes; @synthesize breadTypes;-(IBAction)buttonPressed{    NSInteger fillingRow = [doublePicker selectedRowInComponent:kFillingComponent];    NSInteger breadRow = [doublePicker selectedRowInComponent:                          kBreadComponent];    NSString *bread = [breadTypes objectAtIndex:breadRow];    NSString *filling = [fillingTypes objectAtIndex:fillingRow];    NSString *message = [[NSString alloc] initWithFormat:@"Your %@ on %@ bread will be right up.", filling, bread];    UIAlertView *alert = [[UIAlertView alloc] initWithTitle:  @"Thank you for your order"                                                    message:message                                                   delegate:nil                                          cancelButtonTitle:@"Great!"                                          otherButtonTitles:nil];    [alert show];    [alert release];    [message release];}

Page 46: Beginning iphone 4_devlopement_chpter7_tab_b

- (void)viewDidLoad {    NSArray *fillingArray = [[NSArray alloc] initWithObjects:@"Ham",@"Turkey", @"Peanut Butter", @"Tuna Salad",@"Nutella", @"Roast Beef", @"Vegemite", nil];    self.fillingTypes = fillingArray;    [fillingArray release];    NSArray *breadArray = [[NSArray alloc] initWithObjects:@"White",  @"Whole Wheat", @"Rye", @"Sourdough", @"Seven Grain",nil];    self.breadTypes = breadArray;    [breadArray release];}- (void)viewDidUnload {    [super viewDidUnload];    // Release any retained subviews of the main view.    // e.g. self.myOutlet = nil;    self.doublePicker = nil;    self.breadTypes = nil;    self.fillingTypes = nil; }

- (void)dealloc {    [doublePicker release];    [breadTypes release];    [fillingTypes release];    [super dealloc];}

Page 47: Beginning iphone 4_devlopement_chpter7_tab_b

#pragma mark -#pragma mark Picker Data Source Methods- (NSInteger)numberOfComponentsInPickerView:(UIPickerView *)pickerView {    return 2;}- (NSInteger)pickerView:(UIPickerView *)pickerViewnumberOfRowsInComponent:(NSInteger)component {    if (component == kBreadComponent)        return [self.breadTypes count];    return [self.fillingTypes count];}#pragma mark Picker Delegate Methods- (NSString *)pickerView:(UIPickerView *)pickerViewtitleForRow:(NSInteger)rowforComponent:(NSInteger)component {    if (component == kBreadComponent)        return [self.breadTypes objectAtIndex:row];    return [self.fillingTypes objectAtIndex:row];}

Page 48: Beginning iphone 4_devlopement_chpter7_tab_b

버튼클릭

Page 49: Beginning iphone 4_devlopement_chpter7_tab_b

DependentPickerView 를 만들어 봅시다 .

 

Page 50: Beginning iphone 4_devlopement_chpter7_tab_b

plist 파일의 구조 (1)

Page 51: Beginning iphone 4_devlopement_chpter7_tab_b

plist 파일의 구조 (2)

Page 52: Beginning iphone 4_devlopement_chpter7_tab_b

- DependentComponentPickerViewController.h

#import <UIKit/UIKit.h>#define kStateComponent   0#define kZipComponent     1@interface DependentComponentPickerViewController : UIViewController<UIPickerViewDelegate, UIPickerViewDataSource> {    UIPickerView    *picker;    NSDictionary    *stateZips;    NSArray         *states;    NSArray         *zips;}@property (retain, nonatomic) IBOutlet UIPickerView *picker;@property (retain, nonatomic) NSDictionary *stateZips;@property (retain, nonatomic) NSArray *states;@property (retain, nonatomic) NSArray *zips;- (IBAction) buttonPressed;@end

Page 53: Beginning iphone 4_devlopement_chpter7_tab_b

- DependentComponentPickerViewController.m

#import "DependentComponentPickerViewController.h"@implementation DependentComponentPickerViewController@synthesize picker;@synthesize stateZips;@synthesize states;@synthesize zips;- (IBAction) buttonPressed {    NSInteger stateRow = [picker selectedRowInComponent:kStateComponent];    NSInteger zipRow = [picker selectedRowInComponent:kZipComponent];    NSString *state = [self.states objectAtIndex:stateRow];    NSString *zip = [self.zips objectAtIndex:zipRow];    NSString *title = [[NSString alloc] initWithFormat:                       @"You selected zip code %@.", zip];    NSString *message = [[NSString alloc] initWithFormat:                         @"%@ is in %@", zip, state];    UIAlertView *alert = [[UIAlertView alloc] initWithTitle:title                                                    message:message                                                   delegate:nil                                          cancelButtonTitle:@"OK"                                          otherButtonTitles:nil];    [alert show];    [alert release];    [title release];    [message release];}

Page 54: Beginning iphone 4_devlopement_chpter7_tab_b

- (void)viewDidLoad {    NSBundle *bundle = [NSBundle mainBundle];    NSString *plistPath = [bundle pathForResource:                           @"statedictionary" ofType:@"plist"];    NSDictionary *dictionary = [[NSDictionary alloc]                                initWithContentsOfFile:plistPath];    self.stateZips = dictionary;    [dictionary release];    NSArray *components = [self.stateZips allKeys];    NSArray *sorted = [components sortedArrayUsingSelector:                       @selector(compare:)];    self.states = sorted;    NSString *selectedState = [self.states objectAtIndex:0];    NSArray *array = [stateZips objectForKey:selectedState];    self.zips = array;}- (void)viewDidUnload {    [super viewDidUnload];    // Release any retained subviews of the main view.    // e.g. self.myOutlet = nil;    self.picker = nil;    self.stateZips = nil;    self.states = nil;    self.zips = nil;}

Page 55: Beginning iphone 4_devlopement_chpter7_tab_b

- (void)dealloc {    [picker release];    [stateZips release];    [states release];    [zips release];    [super dealloc];}

Page 56: Beginning iphone 4_devlopement_chpter7_tab_b

#pragma mark -#pragma mark Picker Data Source Methods- (NSInteger)numberOfComponentsInPickerView:(UIPickerView *)pickerView {    return 2;}- (NSInteger)pickerView:(UIPickerView *)pickerViewnumberOfRowsInComponent:(NSInteger)component {    if (component == kStateComponent)        return [self.states count];    return [self.zips count];}#pragma mark Picker Delegate Methods- (NSString *)pickerView:(UIPickerView *)pickerViewtitleForRow:(NSInteger)rowforComponent:(NSInteger)component {    if (component == kStateComponent)        return [self.states objectAtIndex:row];    return [self.zips objectAtIndex:row];}- (CGFloat)pickerView:(UIPickerView *)pickerView    widthForComponent:(NSInteger)component {    if (component == kZipComponent)        return 90;    return 200;}

Page 57: Beginning iphone 4_devlopement_chpter7_tab_b

- (void)pickerView:(UIPickerView *)pickerView  didSelectRow:(NSInteger)row       inComponent:(NSInteger)component {    if (component == kStateComponent) {        NSString *selectedState = [self.states objectAtIndex:row];        NSArray *array = [stateZips objectForKey:selectedState];        self.zips = array;        [picker selectRow:0 inComponent:kZipComponent animated:YES];        [picker reloadComponent:kZipComponent];    }}

Page 58: Beginning iphone 4_devlopement_chpter7_tab_b

버튼클릭

Page 59: Beginning iphone 4_devlopement_chpter7_tab_b

CustomPickerView 를 만들어 봅시다 .

 

Page 60: Beginning iphone 4_devlopement_chpter7_tab_b

- CustomPickerViewController.h

#import <UIKit/UIKit.h>#import <AudioToolbox/AudioToolbox.h>@interface CustomPickerViewController : UIViewController<UIPickerViewDataSource, UIPickerViewDelegate> {    UIPickerView *picker;    UILabel *winLabel;    NSArray *column1;    NSArray *column2;    NSArray *column3;    NSArray *column4;    NSArray *column5;UIButton *button;SystemSoundID crunchSoundID;SystemSoundID winSoundID;}@property(nonatomic, retain) IBOutlet UIPickerView *picker;@property(nonatomic, retain) IBOutlet UILabel *winLabel;@property(nonatomic, retain) NSArray *column1;@property(nonatomic, retain) NSArray *column2;@property(nonatomic, retain) NSArray *column3;@property(nonatomic, retain) NSArray *column4;@property(nonatomic, retain) NSArray *column5;@property(nonatomic, retain) IBOutlet UIButton *button;@property(nonatomic) SystemSoundID crunchSoundID;@property(nonatomic) SystemSoundID winSoundID;- (IBAction)spin;@end

Page 61: Beginning iphone 4_devlopement_chpter7_tab_b

#import "CustomPickerViewController.h"@implementation CustomPickerViewController@synthesize picker;@synthesize winLabel;@synthesize column1;@synthesize column2;@synthesize column3;@synthesize column4;@synthesize column5;@synthesize button;@synthesize crunchSoundID;@synthesize winSoundID;-(void)showButton {    button.hidden = NO;}-(void)playWinSound {    AudioServicesPlaySystemSound (winSoundID);    winLabel.text = @"WIN!";    [self performSelector:@selector(showButton) withObject:nil  afterDelay:1.5];}

Page 62: Beginning iphone 4_devlopement_chpter7_tab_b

- (IBAction)spin {    BOOL win = NO;    int numInRow = 1;    int lastVal = -1;    for (int i = 0; i < 5; i++) {        int newValue = random() % [self.column1 count];        if (newValue == lastVal)            numInRow++;        else            numInRow = 1;        lastVal = newValue;        [picker selectRow:newValue inComponent:i animated:YES];        [picker reloadComponent:i];        if (numInRow >= 3)            win = YES;    }    button.hidden = YES;    AudioServicesPlaySystemSound (crunchSoundID);    if (win)        [self performSelector:@selector(playWinSound)  withObject:nil  afterDelay:.5];    else        [self performSelector:@selector(showButton)  withObject:nil  afterDelay:.5];    winLabel.text = @""; }

Page 63: Beginning iphone 4_devlopement_chpter7_tab_b

- (void)viewDidLoad {    UIImage *seven = [UIImage imageNamed:@"seven.png"];    UIImage *bar = [UIImage imageNamed:@"bar.png"];    UIImage *crown = [UIImage imageNamed:@"crown.png"];    UIImage *cherry = [UIImage imageNamed:@"cherry.png"];    UIImage *lemon = [UIImage imageNamed:@"lemon.png"];    UIImage *apple = [UIImage imageNamed:@"apple.png"];

for (int i = 1; i <= 5; i++) {    UIImageView *sevenView = [[UIImageView alloc] initWithImage:seven];    UIImageView *barView = [[UIImageView alloc] initWithImage:bar];    UIImageView *crownView = [[UIImageView alloc] initWithImage:crown];    UIImageView *cherryView = [[UIImageView alloc]      initWithImage:cherry];    UIImageView *lemonView = [[UIImageView alloc] initWithImage:lemon];    UIImageView *appleView = [[UIImageView alloc] initWithImage:apple];    NSArray *imageViewArray = [[NSArray alloc] initWithObjects:  sevenView, barView, crownView, cherryView, lemonView,  appleView, nil];NSString *fieldName =[[NSString alloc] initWithFormat:@"column%d", i];[self setValue:imageViewArray forKey:fieldName];

Page 64: Beginning iphone 4_devlopement_chpter7_tab_b

        [fieldName release];    [imageViewArray release];    [sevenView release];    [barView release];    [crownView release];    [cherryView release];    [lemonView release];    [appleView release];}

NSString *path = [[NSBundle mainBundle] pathForResource:@"win" ofType:@"wav"];AudioServicesCreateSystemSoundID((CFURLRef)[NSURL fileURLWithPath:path], &winSoundID);

path = [[NSBundle mainBundle] pathForResource:@"crunch" ofType:@"wav"];AudioServicesCreateSystemSoundID((CFURLRef)[NSURL fileURLWithPath:path], &crunchSoundID);

srandom(time(NULL));

}

Page 65: Beginning iphone 4_devlopement_chpter7_tab_b

- (void)viewDidUnload {    [super viewDidUnload];        self.picker = nil;    self.winLabel = nil;    self.column1 = nil;    self.column2 = nil;    self.column3 = nil;    self.column4 = nil;    self.column5 = nil;     self.button = nil;

if (winSoundID)    AudioServicesDisposeSystemSoundID(winSoundID), winSoundID = 0;if (crunchSoundID)    AudioServicesDisposeSystemSoundID(crunchSoundID), crunchSoundID = 0;}

Page 66: Beginning iphone 4_devlopement_chpter7_tab_b

- (void)dealloc {    [picker release];    [winLabel release];    [column1 release];    [column2 release];    [column3 release];    [column4 release];    [column5 release];    [button release];if (winSoundID)    AudioServicesDisposeSystemSoundID(winSoundID), winSoundID = 0;if (crunchSoundID)    AudioServicesDisposeSystemSoundID(crunchSoundID), crunchSoundID = 0;    [super dealloc];}

Page 67: Beginning iphone 4_devlopement_chpter7_tab_b

#pragma mark -#pragma mark Picker Data Source Methods- (NSInteger)numberOfComponentsInPickerView:(UIPickerView *)pickerView {    return 5;}- (NSInteger)pickerView:(UIPickerView *)pickerViewnumberOfRowsInComponent:(NSInteger)component {    return [self.column1 count];}#pragma mark Picker Delegate Methods- (UIView *)pickerView:(UIPickerView *)pickerViewviewForRow:(NSInteger)row          forComponent:(NSInteger)component reusingView:(UIView *)view {    NSString *arrayName = [[NSString alloc] initWithFormat:@"column%d",  component+1];    NSArray *array = [self valueForKey:arrayName];    [arrayName release];    return [array objectAtIndex:row];}@end

Page 68: Beginning iphone 4_devlopement_chpter7_tab_b

버튼클릭

Page 69: Beginning iphone 4_devlopement_chpter7_tab_b

Q & A

 

Page 70: Beginning iphone 4_devlopement_chpter7_tab_b

감사합니다 .

[email protected]발표자 공지훈