Work/iOS

ipod touch에 navigation bar를 달아보자.

kevin. 2008. 4. 1. 09:07
안녕하세요? kevin 입니다.

오늘은 네비게이션 바 를 달아볼꺼에요..

어플들 사용하시다 보면 상단에 edit나 설정 버튼이 있죠? 그것이 네비게이션 바 랍니다.

소스는 http://cafe.naver.com/appletouch.cafe 의 "행" 이라는 분이 올리신 소스를 보고 그대로 따라했어요..

그럼 전체 소스를 보여드릴께요..

#import "naviBar.h"
#import <UIKit/UIKit.h>
#import <UIKit/UIWindow.h>
#import <UIKit/UIView-Hierarchy.h>
#import <UIKit/UIHardware.h>
#import <CoreGraphics/CGColor.h>
#import <Foundation/Foundation.h>
#import <CoreFoundation/CoreFoundation.h>

@implementation naviBar
 -(void)applicationDidFinishLaunching:(id)unused;
{
 // RGBA
 float blue[4] = {0.0f, 0.0f, 1.0f, 1.0f};
 float black[4] = {0.0f, 0.0f, 0.0f, 1.0f};
 NSString *title = [NSString stringWithUTF8String:"반가워 코코아"];
 // fullScreenRect을 얻습니다
 CGRect  screenRect = [UIHardware fullScreenApplicationContentRect];
 screenRect.origin.x = screenRect.origin.y = 0;
 // navigation bar의 size
 CGRect naviRect = CGRectMake(0, 0, 320, 48);
 // text 표시 영역
 CGRect contentRect = CGRectMake(0, 48, 320, 480);
 // 어플리케이션이 실행될 윈도우 만들기
 UIWindow* window = [[UIWindow alloc] initWithContentRect:screenRect];
 // 메인 뷰 생성
 UIView* mainView = [[[UIView alloc] initWithFrame: screenRect] autorelease];
 // UITextView클래스에서 텍스트뷰 인스턴스를 만들고 텍스트를 설정합니다
 textLabel = [[UITextLabel alloc] initWithFrame:contentRect];
 [textLabel setText:title];
 [textLabel setBackgroundColor: CGColorCreate(CGColorSpaceCreateDeviceRGB(), blue)];
 [textLabel setColor: CGColorCreate(CGColorSpaceCreateDeviceRGB(), black)];
 [textLabel setCentersHorizontally: true];
 
 // navigation bar 만들기
 UINavigationBar* naviBar = [[UINavigationBar alloc] initWithFrame:naviRect];
    [naviBar showButtonsWithLeftTitle:@"Left" rightTitle:@"Right" leftBack:NO];
    [naviBar setBarStyle:0];
    [naviBar setDelegate:self];
 // 메인뷰를 윈도우 객체에 삽입.
 [window setContentView:mainView];
 // 메인뷰에 텍스트뷰를 붙임.
 [mainView addSubview: textLabel];
 
// 메인뷰에 네비게이션을 붙임.
 [mainView addSubview:naviBar];
 
 //윈도우를 화면에 표시합니다
 [window orderFront:self];
 [window makeKey:self];
 [window _setHidden:NO];
}
- (void) navigationBar:(UINavigationBar*)navbar buttonClicked:(int)button {
 NSString *right = [NSString stringWithUTF8String:"오른쪽 버튼"];
 NSString *left = [NSString stringWithUTF8String:"왼쪽 버튼"];
    switch (button) {
        case 0:  // 오른쪽 버튼
            [textLabel setText:right];
            break;
        case 1:// 왼쪽 버튼
            [textLabel setText:left];
            break;
                }
}
@end

중요한 부분은 색칠을 따로 해놨어요..

네비게이션 바를 넣기 위한 순서는 아래와 같아요.. (분홍 박스 순서대로 입니다.)

1. 네이게이션 바가 위치할 부분의 영역을 확보해 놓는다.

2. 네비게이션 바를 만든다.

3. 네비게이션 바를 확보한 위치에 넣는다.

4. 네비게이션 바의 버튼이 눌렸을 경우 동작할 내용을 적는다.

ipod touch의 UI는 View로 이루어져 있나봐요..

그래서 메인 윈도우 영역에 각 뷰를 붙여넣는 식으로 UI를 구성하는 것 같아요..

저는 윈도우 영역을 얻어온다음에 거기에 mainView를 붙이고..

mainView에 네비게이션하고 textLabel을 붙였어요..

아래와 같은 그림이 되겠쬬?

요거이 전체 윈도우 겸 mainView입니다.
요 부분이 네이게이션 영역 이구요...
여기서 부터가 textLabel 이 들어갈 영역이네요.


여긴 좀 크죠~?


칸 띄우기.. ㅋㅋ


자바에서는 리스너를 달아줘야 하는데 여기는 버튼이 눌리면 알아서 해당 메소드를 불러주나봐요..

그 메소드가 바로 마지막의 - (void) navigationBar:(UINavigationBar*)navbar buttonClicked:(int)button 입니다.

그 안에서 button의 값에 따라 왼쪽 버튼이 눌렸는지 오른쪽 버튼이 눌렸는지를 알아내서 사용하면 되요..

참 쉽죠? ㅠㅠ