본문 바로가기

프로그래밍/아이폰 프로그래밍

17. 닙 파일 재사용 및 모달 뷰 만들기

이전에 개발한 프로그램에서 닙 파일을 재사용해서 모달 뷰를 만들어 보도록 하겠습니다.


위의 사진과 같이 오른쪽 상단에 + 버튼을 만들어서 버튼을 누르면 밑에서 위로 올라오는 모달뷰를 만들도록 하겠습니다.

1. RootViewController.xib 를 열고 라이브러리에서 Bar Button Item을 찾아서 메인 윈도우로 드래그 합니다.
2. addButtonItem에 대한 IBAction, IBOutlet, 프로퍼티 선언을 추가합니다.
3. addButtonItem에 대해서 프로퍼티의 @synthesize, dealloc에서 release, addButtonPressed 메로스를 추가합니다.
4. 인터페이스 빌더에서 마무리 합니다.


RootViewController.h

#import <UIKit/UIKit.h>


@interface RootViewController : UITableViewController {

NSMutableArray *drinks;

IBOutlet UIBarButtonItem *addButtonItem;

}


@property (nonatomic, retain) NSMutableArray *drinks;

@property (nonatomic, retain) UIBarButtonItem *addButtonItem;


- (IBAction) addButtonPressed: (id) sender;


@end




RootViewController.m

#import "RootViewController.h"

#import "DrinkDetailViewController.h"

#import "DrinkConstants.h"

#import "AddDrinkViewController.h"


@synthesize addButtonItem;



- (void)viewDidLoad {

    [super viewDidLoad];


// 배열을 구현하고 데이터를 채워 넣습니다.

//NSMutableArray* tmpArray = [[NSMutableArray alloc] initWithObjects:@"Firecracker",@"Lemon Drop",@"Mojito",nil];

//self.drinks = tmpArray;

//[tmpArray release];

NSString *path = [[NSBundle mainBundle] pathForResource:@"DrinkDirections" ofType:@"plist"];

NSMutableArray *tmpArray = [[NSMutableArray alloc] initWithContentsOfFile:path];

self.drinks = tmpArray;

[tmpArray release];

self.navigationItem.rightBarButtonItem = self.addButtonItem;

    // Uncomment the following line to display an Edit button in the navigation bar for this view controller.

    // self.navigationItem.rightBarButtonItem = self.editButtonItem;

}



- (IBAction) addButtonPressed: (id)sender {

NSLog(@"Add button pressed");

AddDrinkViewController *addDrinkVC = [[AddDrinkViewController alloc] initWithNibName:@"DrinkDetailViewController" bundle:nil];

UINavigationController *addNavCon = [[UINavigationController alloc] initWithRootViewController:addDrinkVC];

addDrinkVC.drink = nil;

[self presentModalViewController:addNavCon animated:YES];

[addDrinkVC release];

[addNavCon release];

}


- (void)dealloc {

[drinks release];

[addButtonItem release];

    [super dealloc];

}







기존의 닙파일을 재사용하기 위해서 AddDrinkViewController.m 파일을 만들고 DrinkDetailViewController를 상속 받습니다.

AddDrinkViewController.h

#import <UIKit/UIKit.h>

#import "DrinkDetailViewController.h"


@interface AddDrinkViewController : DrinkDetailViewController {


}


- (IBAction) save: (id)sender;

- (IBAction) cancel: (id)sender;


@end




네비게이션 바에 cancel 버튼과 save 버튼을 만듭니다. 닙 파일을 사용하지 않고 코드로 만들어 보겠습니다.
 그리고, save 버튼과 cancel 버튼을 누르면 모달뷰가 밑으로 사라지도록 액션을 만들어 두었습니다.

AddDrinkViewController.m

- (void)viewDidLoad {

    [super viewDidLoad];

self.navigationItem.leftBarButtonItem = [[[UIBarButtonItem alloc] initWithBarButtonSystemItem:UIBarButtonSystemItemCancel target:self action:@selector(cancel:)] autorelease];

self.navigationItem.rightBarButtonItem = [[[UIBarButtonItem alloc] initWithBarButtonSystemItem:UIBarButtonSystemItemSave target:self action:@selector(save:)] autorelease];

}


- (IBAction) save: (id)sender{

[self dismissModalViewControllerAnimated:YES];

}


- (IBAction) cancel: (id)sender{

[self dismissModalViewControllerAnimated:YES];

}