아이폰어플개발정보2010. 9. 17. 00:01
[아이폰 어플리케이션 개발] view 전환하는 방법
1. 전체개관

Window-Based Application 을 생성하면 델리게이트 한개와 기본 윈도우 한개가 자동생성된다.
화면을 한개만 사용할때는 기본 윈도우를 사용하지만 이 프로그램에서는 아무런 기능을 하지 않는다.

어플리케이션 전체를 위한 뷰컨트롤러를 한개를 만들게 되는데 이 컨트롤러가 모든 화면전환 작업을 책임진다.
이 프로그램에서는 뷰컨트롤러를 위한 뷰를 생성하고 화면전환 버튼을 넣는다.
화면이 전환되더라도 가장 높은 레이어에 이 뷰가 지정되기 때문에 버튼은 계속 보이게 된다.

각각의 전환될 화면을 만들게 되는데 각각의 화면마다 뷰와 뷰컨트롤러를 생성한다.



2. Xcode 를 실행한다.



3. 새프로젝트를 생성한다.

- 상단바 > File > New Project

- Window-Based Application 을 선택한다.

- 프로젝트명을 ChangeTest 로 입력한다.

- Use Core Data for storage 게 체크되어 있으면 해제한다.



4. 어플리케이션 전체를 위한 뷰컨트롤러를 생성한다.

- "Groups & Files" 목록에서 ChangeTest > Classes 로 이동한다.

- 상단바 > File > New File 을 클릭한다.

- Cocoa Touch Class 메뉴를 선택하고 UIViewController subclass 를 선택한 후

  옵션은 전부해제하고 Next 를 클릭한다.

- ChangeTestViewController.m 을 생성한다.



5. 각각의 화면을 위한 뷰컨트롤러를 생성한다.

- FirstViewController.m 과 SecondViewController.m 을 생성한다.

- 3번과 동일한 방식으로 생성한다.



6. 각각의 화면을 생성한다.

- "Groups & Files" 목록에서 ChangeTest > Resources 로 이동한다.

- 상단바 > File > New File 을 클릭한다.

- User interface 메뉴를 선택하고 View XIB 를 선택한 후 Next 를 클릭한다.

- FirstViewController.xib 를 생성한다.

- 동일한 방식으로 SecondViewController.xib 를 생성한다.



7. 델리게이트와 첫번째 생성한 뷰컨트롤러를 연결한다.

- ChangeTestAppDelegate.h 를 수정한다.

===============================================================================
#import

@class ChangeTestViewController;

@interface ChangeTestAppDelegate : NSObject {
    UIWindow *window;
    ChangeTestViewController *ctr;
}

@property (nonatomic, retain) IBOutlet UIWindow *window;
@property (nonatomic, retain) IBOutlet ChangeTestViewController *ctr;

@end
===============================================================================

- ChangeTestAppDelegate.m 을 수정한다.

===============================================================================
#import "ChangeTestAppDelegate.h"
#import "ChangeTestViewController.h"

@implementation ChangeTestAppDelegate

@synthesize window;
@synthesize ctr;

- (void)applicationDidFinishLaunching:(UIApplication *)application {
    // Override point for customization after application launch
    [window addSubview:ctr.view];
    [window makeKeyAndVisible];
}

- (void)dealloc {
    [window release];
    [ctr release];
    [super dealloc];
}

@end
===============================================================================



8. 첫번째 생성한 뷰컨트롤러와 뷰컨트롤러를 연결한다.

- ChangeTestViewController.h 를 수정한다.

===============================================================================
#import

@class FirstViewController;
@class SecondViewController;

@interface ChangeTestViewController : UIViewController {
    FirstViewController *first;
    SecondViewController *second;
}

@property (nonatomic, retain) IBOutlet FirstViewController *first;
@property (nonatomic, retain) IBOutlet SecondViewController *second;

- (IBAction)goPrev:(id)sender;
- (IBAction)goNext:(id)sender;

@end
===============================================================================

- ChangeTestViewController.m 을 수정한다.

===============================================================================
#import "ChangeTestViewController.h"
#import "FirstViewController.h"
#import "SecondViewController.h"

@implementation ChangeTestViewController

@synthesize first;
@synthesize second;

- (void)viewDidLoad
{
    FirstViewController *f = [[FirstViewController alloc] initWithNibName:@"FirstViewController" bundle:nil];
    self.first = f;
    [self.view insertSubview:f.view atIndex:0];
    [f release];
}

- (IBAction)goPrev:(id)sender
{
    if (self.first == nil)
    {
        FirstViewController *f = [[FirstViewController alloc] initWithNibName:@"FirstViewController" bundle:nil];
        self.first = f;
        [f release];
    }

    if (self.second.view.superview != nil)
    {
        [second.view removeFromSuperview];
        [self.view insertSubview:first.view atIndex:0];
    }
}

- (IBAction)goNext:(id)sender
{
    if (self.second == nil)
    {
        SecondViewController *s = [[SecondViewController alloc] initWithNibName:@"SecondViewController" bundle:nil];
        self.second = s;
        [s release];
    }

    if (self.first.view.superview != nil)
    {
        [first.view removeFromSuperview];
        [self.view insertSubview:second.view atIndex:0];
    }
}

- (void)didReceiveMemoryWarning {
    [super didReceiveMemoryWarning];

    if (self.first.view.superview == nil)
    {
        self.first = nil;
    }
    else
    {
        self.second = nil;
    }
}

- (void)dealloc {
    [first release];
    [second release];
    [super dealloc];
}

@end
===============================================================================



9. 첫번째 생성한 뷰컨트롤러를 의한 뷰를 생성한다.

- MainWindow.xib 를 더블클릭한다.

- Library 창을 열고 Library > Cocoa Touch > Controllers 에서 View Controller 를 선택해서

  MainWindow.xib 에 넣는다.

- 새로 View Controller 창이 뜨면 그창을 선택하고 Identity Inspector 를 열고 Class 에 ChangeTestViewController 를 선택한다.

- Library 창을 열고 Library > Cocoa Touch > Windows, Views & Bars 에서 View 를 선택해서 새로 View Controller 창에 View 를 넣고

  hidden 속성을 준다.

- 버튼을 두개 생성하고 이전 다음으로 제목을 변경한다.

- 버튼을 선택하고 Connection Inspector 를 열고 Touch up inside 와 ChangeTestViewController 에서 각 함수를 연결한다.

- MainWindow.xib 창의 아이콘중 델리게이트 아이콘을 클릭후 Connection Inspector 를 열어 ctr 과 ChangeTestViewController 를 연결한다.



10. 뷰컨트롤러를 수정한다.

- FirstViewController.h 를 수정한다.

===============================================================================
#import

@interface FirstViewController : UIViewController {

}

@end
===============================================================================

- SecondViewController.h 를 수정한다.

===============================================================================
#import

@interface SecondViewController : UIViewController {

}

@end
===============================================================================

- FirstViewController.m 을 수정한다.

===============================================================================
#import "FirstViewController.h"

@implementation FirstViewController

- (void)didReceiveMemoryWarning {
    [super didReceiveMemoryWarning];
}

- (void)viewDidUnload {
    // Release any retained subviews of the main view.
}


- (void)dealloc {
    [super dealloc];
}

@end
===============================================================================

- SecondViewController.m 을 수정한다.

===============================================================================
#import "SecondViewController.h"

@implementation SecondViewController

- (void)didReceiveMemoryWarning {
    [super didReceiveMemoryWarning];
}

- (void)viewDidUnload {
    // Release any retained subviews of the main view.
}


- (void)dealloc {
    [super dealloc];
}

@end
===============================================================================


11. 뷰를 수정한다.

- FirstViewController.xib 를 더블클릭한 후 File's owner 를 선택한다.

- 상단바 > Tools > Identity Inspector 를 연다.

- Class 에 FirstViewController 를 선택한다.

- View 창 바닥색을 바꾼다.(화면이 바뀌는지 확인을 위해)

- 뷰를 연결한다.(클래스를 바꾸면 View 연결이 해제되므로 다시 연결해주어야 한다.)

- 같은 방법으로 SecondViewController.xib 를 수정한다.



12. 실행한다.

메뉴중 "Build & Go" 를 클릭한다.


출처 : http://blog.naver.com/PostList.nhn?blogId=heajin722¤tPage=23
Posted by 오늘마감

댓글을 달아 주세요