BLOG main image
분류 전체보기 (51)
아이폰 개발 이야기 (12)
스마트폰용 홈페이지 (4)
웹표준 개발 (8)
HTML5 (2)
Objective-C (2)
뉴미디어 기획 이야기 (10)
뉴미디어 뉴스 (12)
88,774 Visitors up to today!
Today 56 hit, Yesterday 72 hit
'아이폰 개발 이야기'에 해당되는 글 12건
2010/08/10 16:28

오늘은 아래와 같은 화면을 XCODE로 만들어 보도록 하겠습니다.



오늘은 탭바는 만들지 않겠습니다.
탭바를 만들었다는 전제 조건하에 위화면을 구성해 보겠습니다.

File > New Project  메뉴를 클릭하면 아래와 같은 화면이 나타 납니다. Window-based Application 타입을 선택한 후 오른쪽 하단의 Choose를 클릭하여 다음 화면으로 넘어 갑니다.



생성할 프로젝트명은 원하시는걸로 입력하세요(ex, bgex)
프로젝트 이름까지 입력하시고 나면 아래와 같은 화면을 접하실 수 있습니다.
(다른 분들은 저와 살짝 다르게 보일 수 있습니다. 단순한 화면 구성의 차이이니 이 프로젝트를 하시는데 큰 문제는 없습니다.)




여기까지는 기본 프로젝트를 만드는 단계이고 이제 이 프로젝트에서 쓰일 이미지 파일들을 Resources 폴더로 넣도록 하겠습니다.



오른쪽의 Finder 에서 원하는 이미지를 선택 한 후 Resources 폴더로 드래그 앤 드롭 합니다. 그러면 창이 하나 뜨는데 copy item into ~  이부분을 체크 하시고 Add 버튼을 눌러 주세요.




이제 Resources 폴더에 있는 MainWindow.xib 파일을 더블클릭하여 인터페이스 빌더를 열고 Library 창에서 Image View를 선택한 후 Window 창에 끓어다 놓습니다. 가운데 있는 창에서 자모양의 아이콘을 선택하고 가로와 세로의 길이를 위와 같이 지정해 줍니다.



왼쪽 Window 창에서 UIImageView를 선택하시고 오른쪽 상단탭중 젤 왼쪽에 있는 탭을 선택하신 후 image의 오른쪽에 있는 화살표를 눌러 좀전에 넣어둔 이미지 중 menu_bg.png 파일을 선택 합니다.



Background 는 선택을 하신 후 Opacity를 0으로 처리 하시면 됩니다. 지금까지 잘 따라하셨다면 아래와 같은 화면이 나타나고 이제 그 위에 버튼 이미지들을 올려 놓도록 하겠습니다.



Library 창에서 Round Rect Button을 Window 창으로 끌어 놓고 가운데 있는 인스펙터 창에서 Background의 이미지를 menu1.jpg로 선택을 해 줍니다.

위와 같은 방식으로 나머지 두개도 처리를 합니다.

 
이제 마지막 남은 전체에 백그라운드를 지정하는 화면 입니다. bgexAppdelegate.m 파일을 여신 후 위와 같이 입력을 하시면 됩니다.
소스코드 :
window.backgrondColor = [[UIColor alloc] initWidthPatternImage:[UIImage imageNamed:@”bg.jpg”]];



이제 완료 되었으니 한번 실행해 보시죠. ㅋㅋ 짜잔~!!!

 

 

 

저작자 표시 비영리 동일 조건 변경 허락
Trackback Address :: http://web2log.com/trackback/61 관련글 쓰기
Name
Password
Homepage
Secret
2010/06/29 10:56

아이폰 어플중에서 지도에 자기 좌표가 찍히고 주소가 나오는 어플들을 많이들 보셨을 텐데요.
오늘은 좌표값과 주소 구하는 방법에 대해서 알아보겠습니다.

이 기능은 참 많은 어플들을 통해서 활용이 가능할 것 같습니다. 
우선 작업목표를 정해보았습니다.

<좌표값으로 현재 주소를 검색하는 어플을 만들기 위한 순서>
1. 새 프로젝트 (Window-based Application)를 생성한다.
2. 새 프로젝트에 뷰를 하나 추가한다.
3. 추가한 뷰에 검색된 결과를 보여줄 화면(Label,Button등등)을 구성한다.
3. 현재 좌표값을 구한다.
4. 구해진 좌표값을 화면에 뿌린다.
5. 구해진 좌표값에 해당하는 주소를 구글맵에서 받아온다.
6. 받아온 결과를 화면에 뿌려준다.

막상 써 놓으니 음... 생각보단 간단하네요~!!
자~~ 이제 목표는 정해졌으니 하나씩 해보면 됩니다.ㅋ

이제 작업목표에서 정한 순서로  진행과정을 살펴보겠습니다..

시작해 볼까요~

1. 새 프로젝트를 생성합니다.
XCode에서 File->New Project->Window-based Application을 클릭하세요.
(아시는 분들도 많겠지만 혹시 모르는 분도 있을까 해서 아래 이미지 참조)



2. 새 프로젝트를 윈도우 베이스로 만들었지만 뭔가 보여줄 화면이 필요합니다.
화면용 파일을 하나 프로젝트에 추가합니다.
XCode화면의 Groups&Files 영역에서 마우스 오른쪽 클릭해서 Add->New File을 합니다.



3. 이제 화면도 만들었습니다.
Command+R 키로 그냥 한번 실행해봅니다. 아무것도 없습니다..
화면에 뭔가 만들어주어야 합니다. 다른 것을 사용해도 되겠지만 이번 작업에서는 단순하게 Label로 모두 처리하도록 합니다.

아래화면 참고해서 같이 만들어보죠.



참고로 화면에 구성된 Label들은 소스파일의 IBOutlet로 선언된 변수들과 연결해주어야 합니다.

4. Label과 아웃렛과의 연결 하셨다면 이제 좌표값을 구해보겠습니다.
좌표값을 구하기 위해서는 CoreLocation.framework을 현재 프로젝트에 추가해주어야 합니다.
추가했나요? 이젠 좌표구하는 부분 소스를 보겠습니다.

=============================================================================================

/*
viewDidLoad  이벤트에 CLLocationManager를 생성해서 실행줍니다.
그러면  #pragma mark - 이하 부분이 자동적으로 실행됩니다.
핵심 소스가 여기입니다.
*/

- (void)viewDidLoad {
 self.locationManager = [[CLLocationManager alloc] init];
 [locationManager startUpdatingLocation];
 locationManager.delegate = self;
 locationManager.distanceFilter = kCLDistanceFilterNone;
 locationManager.desiredAccuracy = kCLLocationAccuracyBest;
}

#pragma mark -
#pragma mark CLLocationManagerDelegate Methods
- (void)locationManager:(CLLocationManager *)manager didUpdateToLocation:(CLLocation *)newLocation fromLocation:(CLLocation *)oldLocation {
 
 if (startingPoint == nil)
  self.startingPoint = newLocation;
 
 NSString *latitudeString = [[NSString alloc] initWithFormat:@"위도 : %g°", newLocation.coordinate.latitude];
 latitudeLabel.text = latitudeString;
 [latitudeString release];
 
 NSString *longitudeString = [[NSString alloc] initWithFormat:@"경도 : %g°", newLocation.coordinate.longitude];
 longitudeLabel.text = longitudeString;
 [longitudeString release];

}

- (void)locationManager:(CLLocationManager *)manager didFailWithError:(NSError *)error {
 
 NSString *errorType = (error.code == kCLErrorDenied) ? @"Access Denied" : @"Unknown Error";
 UIAlertView *alert = [[UIAlertView alloc] initWithTitle:@"Error gettingg location from Core Location" message:errorType delegate:nil cancelButtonTitle:@"Okay" otherButtonTitles:nil];
 [alert show];
 [alert release];
 
}
==============================================================================================


 
5. 좌표값을 받아서 구글맵에서 주소를 조회하는 부분을 보겠습니다.
1) 구글맵에 주소 조회 쿼리를 보내서 결과(XML)를 받아오는 기능을 구현합니다.
2) 받아온 결과(XML)을 파싱하는 기능을 구현합니다.

위에 1), 2)는 유기적으로 함께 구동됩니다.

==================구글맵에 주소 조회 쿼리 보내기=========================

-(IBAction)loadXMLData{
 self.xmlUrl = @"
http://maps.google.com/maps/api/geocode/xml?latlng=37.630478,127.090199&language=kr&sensor=true";
 xmlConnection = [[NSURLConnection alloc]
      initWithRequest:[NSURLRequest requestWithURL:[NSURL URLWithString:xmlUrl]]
      delegate:self];
 
 if (xmlConnection == nil)
  NSLog(@"Connect error");
 else
  [UIApplication sharedApplication].networkActivityIndicatorVisible = YES;
 
 xmlParseData = [[NSMutableArray alloc] init];
 xmlValue = [[NSMutableString alloc] init];
 currectItem = [[NSMutableDictionary alloc] init];
 receiveData = [[NSMutableData alloc] init];
}

#pragma mark URLConnection delegate methods

- (void)connection:(NSURLConnection *)connection didReceiveResponse:(NSURLResponse *)response {
 NSLog(@"Receive: %@, %@, %d",
    [response URL],
    [response MIMEType],
    [response expectedContentLength]);
}

- (void)connection:(NSURLConnection *)connection didFailWithError:(NSError *)error {
 NSLog(@"%@", [error localizedDescription]);
 [UIApplication sharedApplication].networkActivityIndicatorVisible = NO;
}

- (void)connection:(NSURLConnection *)connection didReceiveData:(NSData *)data {
 //NSString *str = [[NSString alloc] initWithData:data encoding:0x80000000 + kCFStringEncodingDOSKorean];
    //NSData *data1 = [str dataUsingEncoding:NSUTF8StringEncoding];

 [receiveData appendData:data];
}

- (void)connectionDidFinishLoading:(NSURLConnection *)connection {
 
 //NSString *str = [[NSString alloc] initWithData:receiveData encoding:0x80000000 + kCFStringEncodingDOSKorean];
    //NSData *data = [str dataUsingEncoding:NSUTF8StringEncoding];
 //NSXMLParser *parser = [[NSXMLParser alloc] initWithData:data];

 NSXMLParser *parser = [[NSXMLParser alloc] initWithData:receiveData];

    [parser setDelegate:self];
 
    [parser parse];
 
 
 [parser release];
 
 [[UIApplication sharedApplication] setNetworkActivityIndicatorVisible:NO];
 
 [xmlConnection release];
 [receiveData release];
}


================================조회 결과 XML을 파싱하여 화면에 보여주기================================

#pragma mark XMLParse delegate methods
//#pragma mark NSXMLParser delegate methods

- (void)parserDidEndDocument:(NSXMLParser *)parser {
 self.clickBtn;
}

- (void)parser:(NSXMLParser *)parser didStartElement:(NSString *)elementName namespaceURI:(NSString *)namespaceURI qualifiedName:(NSString *)qName attributes:(NSDictionary *)attributeDict {
 if ([elementName isEqualToString:@"address_component"])
  elementType = etItem;

 [xmlValue setString:@""];
}

- (void)parser:(NSXMLParser *)parser didEndElement:(NSString *)elementName namespaceURI:(NSString *)namespaceURI qualifiedName:(NSString *)qName {
 
 if (elementType != etItem)
  return;
 
 if ([elementName isEqualToString:@"long_name"]) {
  [currectItem setValue:[NSString stringWithString:xmlValue] forKey:elementName]; 
 } else if ([elementName isEqualToString:@"short_name"]) {
  [currectItem setValue:[NSString stringWithString:xmlValue] forKey:elementName];
 
 } else if ([elementName isEqualToString:@"address_component"]) {
  [xmlParseData addObject:[NSDictionary dictionaryWithDictionary:currectItem]];
 }
}

- (void)parser:(NSXMLParser *)parser foundCharacters:(NSString *)string {
 if (elementType == etItem) {
  [xmlValue appendString:string];
 }
}

좀 부족했지만 위 설명을 잘 수행한다면 다음과 같은 화면이 나오게 됩니다...(제가 사는곳입니다. ㅎㅎㅎ)



부족한 부분은 첨부된 소스 보면 이해가 될겁니다. 파일첨부합니다~!! 화이팅하세요~




 

 

저작자 표시 비영리 동일 조건 변경 허락
Trackback Address :: http://web2log.com/trackback/56 관련글 쓰기
angellake | 2010/07/27 01:32 | PERMALINK | EDIT/DEL | REPLY
감사합니다. 많은 도움이 되었구요....만약 반대로 주소값으로 좌표를 구하려면 어떻게 해야되나요??
현재 위치가 아닌 특정지역의 주소명을 가지고 반대로 좌표값을 구하는 방법이 있으면 좀 가르쳐 주세용~~
심정우 | 2010/07/28 00:43 | PERMALINK | EDIT/DEL | REPLY
특정 주소지에 대한 좌표값을 구하는 것은 역으로 생각하시면 됩니다.
좌표값을 보내서 주소를 받아왔던 것처럼 주소를 보내서 좌표를 받아오는 것이지요..^^
개념적으로는 같구요.. 단지 주소를 받아서 좌표를 리턴해주는 (구글,네이버,다음 등등) 서비스를 하는 곳에다가
원하는 주소값을 보내서 리턴받으시면 됩니다.. 소스가 오히려 더 많이 공유되고 있더라구요..^^
angellake | 2010/07/28 16:27 | PERMALINK | EDIT/DEL | REPLY
네~ 감사합니다...그러면 구글에서는 그런 서비스를 안해주고 구글 네이버 다음등의 api에서 하는건가요??
심정우 | 2010/07/28 23:27 | PERMALINK | EDIT/DEL | REPLY
구글에서 가능한걸로 알고 있지만 저도 테스트는 못해봤습니다..
그래서 한번 검색해봤는데.. 어떤 분이 잘 설명을 해두셨네요... 물론 XCode로 구현한 것은 아니고 PHP로 하셨네요..
참고하시면 좋을듯 싶습니다..

http://blog.naver.com/songws72?Redirect=Log&logNo=50077099849

^^ 별거아닌 포스트에 관심주시니 감사합니다.. 저도 아는게 짧아서 답변이 좀 어설픈 점 양해부탁드립니다..
우와 | 2010/08/03 04:24 | PERMALINK | EDIT/DEL | REPLY
멋져요~~ 퍼가고 싶은데 어떻게 퍼가는지 몰라서 즐겨찾기 등록해둘께요

삭제하지마세요 자주 놀러올께요
acid | 2010/09/08 21:07 | PERMALINK | EDIT/DEL | REPLY
http://maps.google.com/maps/api/geocode/xml?latlng=37.630478,127.090199&language=kr&sensor=true

이 주소에서 보여지는 xml 데이터는 저는 영어로 뜨는데...어떻게 한글로 받아오신건지 궁금합니다..ㅠㅠ

url에서도 보여지다시피 language=kr 이란 부분이 있긴 하나 ...저는 영어로 보입니다...ㅠㅠ
| 2010/11/10 11:31 | PERMALINK | EDIT/DEL | REPLY
비밀댓글입니다
Name
Password
Homepage
Secret
2010/06/25 15:32


요즘 잘나가는 앱들을 살펴보면  이쁜 배경에 이쁜 버튼 ..
정말 우리 나라 사람들은 디자인을 참 중요히 여기는 것 같습니다.

저만 해도 같은 기능이라도 기본 베이직 스킨보다는 이쁜 배경을 가진 앱을 더 선호하게 되더라고요.

그래서 오늘은
Tab Bar 를 커스텀 구현하는 내용을 포스팅 하도록 하겠습니다.
제가 지금 부터 하는 커스텀은 약간의 뺑기(?) 라고 할수 있어요. 눈 속임이랄까, 정말 탭바 버튼 하나하나에 커스텀을 하는게 아니고 배경 자체를 덮어서  오른쪽 클릭하면 배경 탭바이미지1를 보여주게하고  왼쪽 클릭하면 2 배경탭바 이미지를 보여주게하는 내용입니다.

탭바 전체를 덮어야하기 때문에 아래 와 같은 이미지 2개가 필요합니다. (버튼이 늘어날수록 물론 이미지는 더 필요하겠죠?


사용자 삽입 이미지

별로 어렵지 않습니다. 후다닥 만들어 보겠습니다.
프로젝트 새로 선택하셔서  Tab Bar Application 선택해서 적당한 프로젝트 명으로  만들어주세요. 저는 TabBar 라고 만들었어요.
그리고 탭바 배경이미지가 될 2개의 이미지를 리소스 폴더에 넣어주시고요.  ( 이미지는 소스파일 참고하세요 )

사용자 삽입 이미지


그리고 소스에 아래와 같이 프로그래밍 해주세요 . 설명 참고하시면 이해 가실거예요.

TabBarAppDelegate.h


#import <UIKit/UIKit.h>

@interface TabBarAppDelegate : NSObject <UIApplicationDelegate, UITabBarControllerDelegate> {
    UIWindow *window;
    UITabBarController *tabBarController;
    UIView *tabBarBg;
}

@property (nonatomic, retain) IBOutlet UIWindow *window;
@property (nonatomic, retain) IBOutlet UITabBarController *tabBarController;
@property (nonatomic, retain) IBOutlet UIView *tabBarBg;

@end


TabBarAppDelegate.m


#import "TabBarAppDelegate.h"

@interface UITabBarController (private)   
- (UITabBar *)tabBar;

@end


@implementation TabBarAppDelegate

@synthesize window;
@synthesize tabBarController;
@synthesize tabBarBg;


- (BOOL)application:(UIApplication *)application didFinishLaunchingWithOptions:(NSDictionary *)launchOptions {   
   
 CGRect frame = CGRectMake(0, 0, 480, 49);  //탭바 아래쪽 위치 좌표

 tabBarBg = [[UIView  alloc] initWithFrame:frame]; 
 UIImage *tabBarBackgroundImage = [UIImage imageNamed:@"MENU1.png"];   //이미지를 변수에 저장

 UIColor *color = [[UIColor alloc] initWithPatternImage:tabBarBackgroundImage];  //변수에 저장된 이미지를 UIColor 형 타입으로 저장
 
 [tabBarBg setBackgroundColor:color];   //위에서 선언인 UIView 에다 이미지를 올리기
 [color release];
 [[tabBarController tabBar ] insertSubview:tabBarBg atIndex:0];   //탭바 atIndex 0번째에  위에 이미지 올린 UIView 집어넣음

     // Add the tab bar controller's current view as a subview of the window
    [window addSubview:tabBarController.view];
    [window makeKeyAndVisible];

 return YES;
}

// 탭바 선택할 때 호출되는 곳  (이 이벤트를 쓰기 위해서는 탭바를 delegate 로 지정해야해요 이건 아래쪽에 그림과 함께 설명해드릴게요)
- (void)tabBarController:(UITabBarController *)tabBarController didSelectViewController:(UIViewController *)viewController {
 
 NSInteger tabIndex = tabBarController.selectedIndex;  //현재선택된 탭바 index를  인트형 변수에 할당
 

 if (tabIndex == 0) {   //0번째 탭이 선택되면  이미지 를 MENU1.png로 변경

  UIImage *tabBarBackgroundImage = [UIImage imageNamed:@"MENU1.png"];
 
  UIColor *color = [[UIColor alloc] initWithPatternImage:tabBarBackgroundImage];
 
  [tabBarBg setBackgroundColor:color];
  [color release];
  [tabBarBackgroundImage release];
 


 }else { //그 외 선택되면  이미지 를 MENU2.png로 변경
  UIImage *tabBarBackgroundImage = [UIImage imageNamed:@"MENU2.png"];
 
  UIColor *color = [[UIColor alloc] initWithPatternImage:tabBarBackgroundImage];
 
  [tabBarBg setBackgroundColor:color];
  [color release];
  [tabBarBackgroundImage release];
 
 }

 }

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

@end

소스 자체는 어렵지 않죠? ^^
근데 소스 중간에 설명했듯이 didSelectViewController 이 이벤트를 사용할려면 tabBar가 gelegate로 지정되어 있어야 쓸수 있어습니다. 아래 와 같이  연결해주면 tabbar 가 gelegate로 지정이 됩니다.


사용자 삽입 이미지


그럼 실행해 볼까요?

사용자 삽입 이미지


참 쉽죠잉~~

소스파일 첨부합니다 ^^


저작자 표시 비영리 동일 조건 변경 허락
Trackback Address :: http://web2log.com/trackback/55 관련글 쓰기
Tracked from SuNoo.net | 2011/10/17 14:18 | DEL
여차저차 하여, 텝바 App 구현 하는 방법은 습득했다. 그러나.. 그렇게 하고 나면... 기본적으로 검은 배경에 흰 아이콘, 선택시 파란색으로 나타나기에, 너무 네이티브하게 제공된 느낌이 강해..
ryu | 2010/07/02 22:59 | PERMALINK | EDIT/DEL | REPLY
정말 쉽고 친절하게 설명 해주셔서 너무 감사합니다~!!
web2log | 2010/07/05 10:44 | PERMALINK | EDIT/DEL
도움이 되셨다니 다행입니다. 방문 감사드립니다.
박세진 | 2010/08/03 20:09 | PERMALINK | EDIT/DEL | REPLY
이야 예전에 구글링 할때는 외국사이트 밖에 없었는데

이렇게 좋은 한글 사이트가 있네요.

친절한 설명 감사합니다.
web2log | 2010/08/20 15:54 | PERMALINK | EDIT/DEL
방문 감사드립니다.
항해사 | 2010/08/18 18:10 | PERMALINK | EDIT/DEL | REPLY
좋은 정보 감사합니다 .

구현을 해 보았는데 메뉴를 3-4번 정도 바꾸면 어플이 죽어 버리는 현상이 발생 하더군요
혹시 그런 경험은 없으신지요 ?
해준아빠 | 2010/08/30 10:10 | PERMALINK | EDIT/DEL | REPLY
좋은 내용 감사합니다.
.zip 파일 받아서, 실행해 (ios4) 버튼 몇번 클릭하면

#18 0x0000240c in -[TabBarAppDelegate tabBarController:didSelectViewController:] (self=0x115890, _cmd=0x332eafc0, tabBarController=0x13f150, viewController=0x13f310) at /Users/YoungHoShin/Downloads/TabBar/Classes/TabBarAppDelegate.m:56
56 [tabBarBg setBackgroundColor:color];

이부분에서 죽었습니다.
저도 확인해 보겠지만. 우선 올려 봅니다.
이방인 | 2010/09/05 14:35 | PERMALINK | EDIT/DEL | REPLY
죽는 이유는 간단합니다.
메모리 문제 입니다.

코드 2줄만 제거 하면 됩니다.
기본적인 메모리 관리를 못한 것입니다.
ds1adr | 2010/11/21 16:17 | PERMALINK | EDIT/DEL | REPLY
앗 대박... ㅠ.ㅠ 몰라서 탭바를 흉내내서 탭바처럼 구현하곤 했었는데... ㅠ.ㅠ
감사합니다...

아. 그리고 죽는다는 분들은
[tabBarBackgroundImage release]; 만 제거 하시면 될 겁니다. ^^
alloc -> init로 생성한게 아니라서요. ^^
진s | 2011/02/09 19:03 | PERMALINK | EDIT/DEL | REPLY
감사합니다~ ㅎ_ㅎ.. 이 소스를 참고로 탭바 말고 버튼을 통한 것도 해봐야겠네요 ㅇ_ㅇ~
overthe | 2011/03/08 03:34 | PERMALINK | EDIT/DEL | REPLY
커스텀 탭바의 경우 private 함수를 이용해서 구현하면 리젝을 당한다고 하던데.... 위의 예제는 괜찮은지요.
호리에상 | 2011/10/13 11:55 | PERMALINK | EDIT/DEL | REPLY
위의 내용처럼 값을 처리 했는데
핑크색 위에 회색이 덧 씌어져 나오네요.....
회색부분은 탭바의 클릭시 나오는 화면인거 같습니다.
Denny | 2011/10/17 13:56 | PERMALINK | EDIT/DEL | REPLY
우와~! 찾고 있던 예제입니다^^ 퍼가욤!!ㅋ
Rhee | 2012/03/25 02:42 | PERMALINK | EDIT/DEL | REPLY
소스 다운 받아 실행을 해보았는데..
검게 나오면서 첨부 하신 그림처럼 텝바 변경이 안되네요.. ㅜㅜ
Name
Password
Homepage
Secret
2010/05/27 10:25


안녕하세요. 이제부터 아이폰 어플에 쓰이는 컨트롤러들을 한개씩 간단한 예제와 함께 설명하려 합니다.

그 첫번째 테이블 뷰 입니다.

아마 컨트롤러 중에서  방대하게 쓰이는 게  이 테이블 뷰가 아닐까 생각되네요 ^^

테이블뷰 사용 예제는 4가지로 나눠서 포스팅할게요

1. 간단한 테이블 뷰 예제
2. 네비컨트롤러를 이용한 테이블뷰 예제
3. XML를 이용한 테이블 뷰 예제
4. 테이블 뷰에 셀 디자인 예제


오늘은 그 첫번째 간단한 테이블 뷰 예제 입니다.


새 프로젝트 선택하고  TableTest 라는 이름으로 프로젝트 생성해주세요. 프로젝트 생성해 주실때는 네모칸 친 view_based Application 으로 선택해주세요.



이제 테이블 뷰를 IB에서 집어넣을게요 TableTestViewController.xlb 를 열어주세요.



그림처럼 테이블 뷰를 View 창에 끌어다 넣으세요~ 그럼 화면과 같이 꽉 차게 들어가면 됩니다.
집어넣은 테이블 뷰 선택한 상태에서  네모칸 친곳을 보면 dataSource 와 delegate 가 보일꺼예요
그걸 File;s Owner로 연결해 주세요.  이렇게 함으로 어플이 실행될때 이 테이블 뷰 컨트롤러를 델리게이트로 인식해서 AppDelegate에서 별다른 코드를 넣지 않아도 테이블 뷰를 먼저 띄우게 됩니다.


이제 소스 작업을 하겠습니다. 
TableTestViewController.h 를 열어주시고  아래와 같이 코드를 써주세요


#import <UIKit/UIKit.h>

@interface TableTestViewController : UIViewController <UITableViewDelegate , UITableViewDataSource>{

 NSArray *listData;  //테이블뷰에 들어갈 테이타를 저장 할  배열 변수  선언

@property (nonatomic, retain) NSArray *listData; 
@end


TableTestViewController.m 를 열어주시고  아래와 같이 코드를 써주세요




#import "TableTestViewController.h"

@implementation TableTestViewController

@synthesize listData;  //앞에서 선언한거 synthesize 해주고요

 

//처음 동작할때 로드되는 부분입니다.  저희는 배열에 데이타를 넣는 작업을 했습니다.
- (void)viewDidLoad {
 NSArray *array = [[NSArray alloc] initWithObjects:@"AAAA",@"BBBBB",@"CCCCCC",@"DDDDDD",nil];
 
 self.listData = array;
 [array release];  //선언된 변수 초기화
 
    [super viewDidLoad];
}

- (void)didReceiveMemoryWarning {
 // Releases the view if it doesn't have a superview.
    [super didReceiveMemoryWarning];
 
 // Release any cached data, images, etc that aren't in use.
}

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

//여기가 본격적인  테이블뷰 코딩 작업입니다.
#pragma mark Table view methods

- (NSInteger)numberOfSectionsInTableView:(UITableView *)tableView {
    return 1;   //테이블 그룹갯수를 리턴합니다. 저희는 테이블이 따로 그룹이 필요없고 한개만 될 것이기 때문에 1 적어주시고
}

- (NSInteger)tableView:(UITableView *)tableView numberOfRowsInSection:(NSInteger)section {
    return [self.listData count];   //데이타 갯수를 리턴합니다. 배열의 갯수를 리턴합니다.
}

- (UITableViewCell *)tableView:(UITableView *)tableView cellForRowAtIndexPath:(NSIndexPath *)indexPath {
   
    static NSString *CellIdentifier = @"Cell";
   
    UITableViewCell *cell = [tableView dequeueReusableCellWithIdentifier:CellIdentifier];
    if (cell == nil) {
        // 셀 스타일을 정하는 구간입니다. 빨간색 부분을  UITableViewCellStyleValue1 / UITableViewCellStyleValue2 / UITableViewCellStyleSubtitle / UITableViewCellStyleDefault  이렇게 4가지 방식으로 바까보세요 셀 형식이 바뀌는걸 보실수 있으실 겁니다 
        cell = [[[UITableViewCell alloc] initWithStyle:UITableViewCellStyleSubtitle reuseIdentifier:CellIdentifier] autorelease];
    }
   
 NSUInteger row = [indexPath row];  
 cell.textLabel.text = [listData objectAtIndex:row];     //로우 indexPath와 배열 index와 매칭시켜서 값을 집어넣어요
 cell.detailTextLabel.text = @"서브텍스트";    //서브텍스트라벨에 글자를 집어넣습니다.
 
 cell.accessoryType = UITableViewCellAccessoryDisclosureIndicator;   //테이블 뷰 옆에  [>] 이런 화살표 이미지가 이 옵션으로 생깁니다. 필요 없으신 분은 삭제 하셔도 무방하세요~
    return cell;
}

 

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


@end



자 그럼 결과를 실행해볼게요 위에 코드 설명에 보면 빨간색으로 표시된 UITableViewCellStyleSubtitle  부분 보이죠
이부분이 셀 스타일을 지정해 주는 것으로

UITableViewCellStyleValue1 / UITableViewCellStyleValue2 / UITableViewCellStyleSubtitle / UITableViewCellStyleDefault   

이 4개중 여러개로 바꿔보시면서 컴파일 해보세요

아래는 스타일에 따른  컴파일 화면입니다.


① UITableViewCellStyleDefault 
   일 경우 




② UITableViewCellStyleValue1    일 경우 



③ UITableViewCellStyleValue2  일 경우





소스파일 첨부합니다. 참고하세요~~



다음번에는  네비게이션을 추가해서 셀을 클릭하면 디테일 뷰로 넘어가는  테이블 뷰를 만들어보겠습니다.









저작자 표시 비영리 동일 조건 변경 허락
Trackback Address :: http://web2log.com/trackback/48 관련글 쓰기
Name
Password
Homepage
Secret
2010/05/24 16:26
아이폰 개발자 등록방법 을 묻는 질문들이 포털에 많이 올라오고 있습니다.
결제만 한글로 되어있고 신청은 영어로 해야되서 그런지 사람들이 좀 어려워 하는 것 같아서 캡쳐를 해보았습니다.

 영어를 만나면 머리가 어지러워지는 관계로.. 최대한 자세히 캡쳐하면서도 설명은 간락하게 했습니다. ^^;

많은 도움이 되었으면 좋겠네요. (참고로 web2log라는 회사 명의로 개발자 등록을 했습니다.)



http://developer.apple.com/iphone/index.action
  페이지에 들어갑니다. 이제 시작이죠 후훗


아이디를 가지고 계신분들은 로그인을 하시면 됩니다. 저는 새로 아이디를 만들었습니다.


상단 부분은 아이폰 개발 프로그램, 아래부분은 맥 개발자 프로그램입니다.
우선 상단에 첫번째는 개인개발자입니다. 두번째 체크한 부분은 회사로 등록하는 거구요.
세번째는 500명 이상의 직원을 가진 회사가  사내에서만 쓸 수 있는 어플리케이션을 등록하는 엔터프라이즈 계정입니다.
마지막은 대학에서 아이폰개발을 교육용으로 쓰기위해서 받는 무료 프로그램입니다.


일년에 99달러(결과적으로 104,000원)를 내면 된다는군요 , 파란색 등록버튼을 눌러줍니다.


간략하게 개발 프로세스를 설명해주고 있네요 , 컨티뉴~~!!고고


기존 개발자인지 새로운 개발자인지를 물어보는군요.
저는 새롭게 개발자 등록을 하는 것 중에서 계정도 새로만든다고 체크했습니다.


개인으로 가입할 것인지 회사이름으로 가입을 할 것인지를 묻는 창입니다. 회사로 가입하였습니다.


아이디와 비밀번호 생년월일, 그리고 이름, 이메일 국가, 지역 등의 개인정보까지 입력해줍니다.


첫질문으로 어떤 플랫폼을 개발할 것인지를 묻습니다.
아이폰 운영체제, 맥OS X 등을 체크하고 원하는 시장과 유료/무료 어플리케이션을 개발할 것인지,
개발은 얼마나 경력이 있는지 , 다른 모바일 플랫폼에서도 개발을 할 계획인지 등을 체크해줍니다.


약관을 술술술 대충 읽고나서 체크박스 체크한 뒤 동의 버튼을 누릅니다.


아까 적은 이메일로 숫자가 여섯자린가 일곱자리가 옵니다. 메일로 받은 숫자를 입력하고 컨티뉴~~고고


회사 정보들을 입력해 줍니다.


회사 정보를 입력하시면 되겠습니다. 법적으로 책임질 수 있는 확실한 정보를 입력하라네요.


입력하신 정보를 확인하고 맞으면 컨티뉴 ~~고고


입력이 일차적으로 끝났습니다. 여기까지 하셨으면 그다음 메일을 기다리셔야 합니다.
요 메일은 바로 옵니다.


접수된 아이디(Enrollment ID)가 메일로 옵니다. 음.. 이건 다음 메일이 왔을때 필요합니다.


네 이게 팩스번호입니다. 팩스에다가 회사 영문 사업자 등록증을 팩스로 넣는데
팩스로 넣을때 거기에다가 등록된 ID(Enrollment ID)를 함께 적어서 팩스로 보내셔야 합니다.

그리고 약 2주간 기다립니다.
.......

기다려도 기다려도 오지 않는 답장메일..

그래서 다시 스캔을 해서 메일로 보냈습니다.
jhkim@asia.apple.com - 애플 아시아 담당자인가 봅니다. 팩스로 보냈던 영문 사업자등록증을 스캔해서 메일로 보냈습니다.



잘 받았다고 답변이 왔습니다. 가운데 링크를 통해서 이제 구매를 하면 끝입니다.


메일에 링크를 타고 들어와서 개발 프로그램 라이센스를 읽고 동의한뒤 버튼을 꾸욱 누르면,


애플 온라인 스토어에서 주문하시고 등록 활성화 메일을 24시간안에 보내준다고 하는 문구입니다.
24시간안에 활성화 메일이 오지 않으면 연락달라는군요.


요기서부터는 익숙한 한글창입니다. 결제하기 버튼을 누릅니다.


다시한번 주소가 정확한지 적어줍니다.

카드이용 결제하시면 됩니다.


자 드디어 끝났습니다 ^^;
 ㅋㅋㅋ 아 막상 해보면 별거 아닌데 , 기다리고 기다리는 시간들이 너무 지루한것 같습니다.
밉습니다. 애플 ㅠㅠ
저작자 표시 비영리 동일 조건 변경 허락
Trackback Address :: http://web2log.com/trackback/46 관련글 쓰기
지나가가다 | 2010/05/25 18:42 | PERMALINK | EDIT/DEL | REPLY
1등인듯..

좋은 정보 감사합니다..

한번 도전해 보고 싶어지네요..
web2log | 2010/05/26 14:50 | PERMALINK | EDIT/DEL | REPLY
방문 감사드립니다. 하나씩 해보세요~
hidekr | 2010/05/27 15:54 | PERMALINK | EDIT/DEL | REPLY
좋은정보 감사합니다.
혹시 어플리케이션 개발 후 등록 하는 법도
이렇게 쉽게 좀 주실수 있으실까요??ㅠ_ㅠ
정말 막막합나디...
web2log | 2010/05/27 16:10 | PERMALINK | EDIT/DEL
당근 포스팅 예정입니다.ㅋ
방문객 | 2010/05/28 10:07 | PERMALINK | EDIT/DEL | REPLY
초보라서 어떻게 해야할지 막막했는데.. 정말 감사드립니다^^
web2log | 2010/05/28 15:44 | PERMALINK | EDIT/DEL
도움이 되셨다니 기쁩니다. 앞 댓글에도 썼듯이 개발 후 소스 등록하는 방법에 대해서도 포스팅할 건데요, 간단하기도 하면서도 은근히 스트레스 받습니다. 천천히 릴렉스 하세요~
다솜아빠 | 2010/05/28 16:56 | PERMALINK | EDIT/DEL | REPLY
생년월일, 국가정보, 주소 등을 넣는 화면에서 모든 항목을 채워도 다음과 같은 애러를 출력하고는 다시해보라네요.. 며칠째 이러고 있습니다. ㅡ.ㅡ;

We are experiencing technical difficulties. Please try again later.

Please return to the Member Center and try again.
한세희 | 2010/06/22 13:12 | PERMALINK | EDIT/DEL | REPLY
팩스번호 써있는 메일은 기다리면 오는건가요?ㅠㅠ
기수 | 2010/06/25 10:54 | PERMALINK | EDIT/DEL
전 하루 지나니까 메일로 오던데요.
web2log | 2010/06/25 17:41 | PERMALINK | EDIT/DEL
팩스 보내라는 메일은 비교적 금방 옵니당
Macros | 2010/07/05 10:58 | PERMALINK | EDIT/DEL | REPLY
대학 란에 체크 했더니 위에 적어놓으신 것과는 사뭇 다른 (너무 간단한) 폼으로 진행이 되고 끝나 버렸는데요?
개발자 등록비용도 따로 물어보지 않구요.... 뭔가 잘못된 것일까요???
(참고로 저는 실제 대학의 관계자 맞습니다.... ^^)
onemanbo | 2010/10/15 09:35 | PERMALINK | EDIT/DEL
대학의 연구용으로 사용하시는 것은 공짜로 알고 있습니다. 그래서 등록비용을 묻지 않은것이 아닐까요?ㅎ
| 2010/07/07 17:19 | PERMALINK | EDIT/DEL | REPLY
팩스 보낸 후는 얼마나 걸릴까요..ㅠ_ㅠ? 일주일 지났는데..반응이없어요 ㅠ_ㅠ 전화할 수도 없고..ㅠ_ㅠ
onemanbo | 2010/10/15 09:36 | PERMALINK | EDIT/DEL
댓글이 너무 늦었네요. 약 2주정도 걸리기도 합니다.
| 2010/10/14 09:38 | PERMALINK | EDIT/DEL | REPLY
회사 정보를 입력하시면 되겠습니다. 법적으로 책임질 수 있는 확실한 정보를 입력하라네요.

-> 여기서 First, Last는 제 이름인가요 대표(사장)님 이름 인가요? 그리고 Title은 뭘 써야 하나요? 잘 몰라서 회사 이름 적었는데... 에휴 영어를 못해서 죽겠네요 ㅠㅠ

그리고.. 첫번째 고맙다는 메일은 받았는데, 멤버쉽 센터에 들어가서 진행중인 프로그램 확인해 보면 없습니다. 이게 정상 맞나요?
onemanbo | 2010/10/15 09:44 | PERMALINK | EDIT/DEL
first, last네임은 대표의 이름이 아니라 담당자(신청자)의 이름과 연락처를 적으시면 되구요, 타이틀에는,, 저는 직급을 넣었습니다. 그리고 멤버쉽센터에서 로그인을 했을때 진행중인 바가 표시되지 않는것은 정상적으로 이뤄지지 않아서 인것 같습니다. 이메일 받은 링크로 들어가 보시면 진행중인 상태가 프로세스 바로 표시됩니다.
| 2010/10/15 16:37 | PERMALINK | EDIT/DEL | REPLY
답변 고맙습니다.
잘못해서 취소됐나 싶어서 다시 구입하려고 했더니...
Review & Submit 에 걸려 있네요.
나에게도 팩스 보내달라고 요구 하란 말이야 ㅠㅠ
일단은 koreadev@apple.com 에 문의 했습니다. (한국인 담당자라고 한글로 써도 된다더군요)
잘 진행 되기릴 간절히 바랍니다... (개인 등록 할때는 잘 됐는데 ㅠㅠ)
jaemu | 2011/06/20 16:51 | PERMALINK | EDIT/DEL | REPLY
감사합니다..혹시 아이디랑 비번을 잊어버렸는데
어디다가 연락해야되나요??
이민혜 | 2011/06/28 14:24 | PERMALINK | EDIT/DEL | REPLY
오늘 처음 등록해 보는데, 자세히 정리해 주셔서 도움이 많이 됩니다.^^
그런데, 1차등록을 마치고 보니 회사명영문 스펠링이 틀렸네요. 이거 수정하려면 어떻게 해야 하나요?
로그인 하면, My Profile(개인정보)은 쉽게 찾아서 수정했는데 정작 회사정보란은 어디서 수정해야 할지 모르겠습니다.
takuma | 2011/10/27 15:10 | PERMALINK | EDIT/DEL | REPLY
상세하면서도 간결하게 올려주신 자료 덕분에 개발자등록 무사히 진행했습니다.
글이 작년것이라 올해와 조금 바뀐 부분이 있지만 대부분 비슷해서 글보며 따라하니 그대로 진행되더라고요.
이쪽으로 문외한이라 걱정 많이 했는데 정말정말 감사합니다!!!! ^---^
김기섭 | 2011/11/02 16:27 | PERMALINK | EDIT/DEL | REPLY
방법을 너무 자세히 써줘서 쉽게 했습니다.
너무 감사드립니다.
박성철 | 2012/01/30 11:14 | PERMALINK | EDIT/DEL | REPLY
자세한 포스팅 감사합니다. 옆에 띄어두고 따라하면서 등록 완료했네요.
결제 이후에는...ㅋㅋ 이제 모 하면 될까요?
Name
Password
Homepage
Secret
2010/05/10 11:40


오늘의 포스팅은 문자열(NSString) 다루기 예제입니다.


코코아에서는 문자열을 선언할 시 NSString 클래스를 사용합니다. 
기본적으로 문자열을 대입 할 시에는 @ 를 꼭 붙여준다음 문자를 써줘야 합니다. 

아래 예제를 보시면 이해가 가실거예요 


// 빈 문자열 생성하기
NSString *str1 = [NSString new];


//일반적인 문자열 대입 - 문자열 상수

str1 = @"web2log.com";


//포멧 문자열(stringWithFormat) - 변수 대입방식
NSString *str2 = [NSString stringWithFormat:@"Hi, %@",str1
];


//포멧 문자열(stringWithFormat) - 숫자 대입방식

NSString *str3 = [NSString stringWithFormat:@"Integer, %d",123456];


//포멧 문자열(stringWithFormat) - 문자열 대입방식

NSString *str4 = [NSString stringWithFormat:@"stringWithFormat, %s","web2log.com"];


//Object-C형식 문자열

NSString *str5 = [NSString stringWithString:@"web2log.com"];  


//C형식 문자열

NSString *str6 = [NSString stringWithCString:"web2log.com"];


//문자열 Append (추가)

NSString *str7 = [str6 stringByAppendingString:@":web2log.com"];


//문자열 길이 구하기

int len = [str7 length];


//String형을 int형으로 형변환하기

int vInt = [@"1234" intValue];


//String형을 float형으로 형변환하기

float vFloat = [@"1234.56" floatValue];


//메모리 할당한 문자열 변수 제거

[str1 release];



그리고 위에 예제코드를 바탕으로 간단한 샘플앱을 만들었는데요,
파일 첨부합니당~!



샘플 앱의 결과 화면을 볼까요



저작자 표시 비영리 동일 조건 변경 허락
Trackback Address :: http://web2log.com/trackback/38 관련글 쓰기
Name
Password
Homepage
Secret
2010/05/03 08:29

저번  아이폰 개발하기 전 준비과정을 담은 포스팅 아이폰-개발-시작-기초과정-1
Xcode 설치 하는 법을 아셨을 거예요.

자 그럼  지금부터 아주 간단한 아이폰 어플을 만들어 보아요 ^^
우리 만들 첫 프로젝트는 프로그래밍을 처음 배우면 가장 먼저하는 프로젝트 [ Hello World ] 를 화면에 보여주는 어플을 만들어 보겠습니다. ㅎㅎㅎ 그냥 Hello World만 보여주면 섭하니깐 버튼을 클릭하면 Hello World 가 보이도록 해볼게요 

## 일단 이 포스팅은 Xcode를 작동하는 방법 및 과정을 알려드리기 위한 것이므로  하는 도중 나오는 자세한 문법 설명은 생략하겠습니다. 차후 Objective_C 카테고리를 통해 프로그래밍 문법에 대한 자세한 설명 및 예제를 올리겠습니다.


일단 Xcode 를 클릭하면 아래 와 같은 화면이 나오는 것을 확인하실거예요.
(Xcode 버전마다 화면 구성이 약간 다를 수 있고 이 포스팅은 Xcode 3.2 버전으로 씁니다).



Create a new Xcode project 를 선택합니다.



Application 선택하고 우리는 아주 간단하면서 기본적이며 유명한;; Hello World 를 만들거기 때문에  [ Window-based Application ]을 선택하여 프로젝트를 만듭니다.




프로젝트 명을 입력하라고 나오네요. HelloWorld 를 적어주시고 저장할 공간 선택하신다음  Save 해주세요
여기서 주의하실 점은 프로젝트는 첫 문자는 항상 대문자로 해주셔야 한다는 것 잊지 마시고요




짜잔~기본적인 구성으로 프로젝트가 생성 되었네요.  5개의 폴더가 보이시죠. 하나 하나 차근 차근 보도록 하죠 ^^

① Classes  - 실질적으로 돌아가는  코드들이 들어있습니다. 앞으로 우리와 가장 많이 작업할 공간이죠.
   복잡한 프로젝트일 수록 나중에 여기에 수많은 클래스 코드들이 생성 될거예요 . 

② Other Sources  - Objectiv C 클래스가 아닌 다른 소스 코드 담는 곳인데 우리는 Objectiv C로 만들거기 때문에 여기
   폴더는 그냥 이쁘게 닫아주세요. 이미 있는 소스도 건들지 마세요

③ Resources - 이미지 라든지 동영상이라든지 어플에 들어가는 파일들을 들어가는 곳입니다. 
   근데 폴더 안에 보면 MainWindow.xib 라고 있죠. 
   인터페이스 빌더의 정보를 담고 있는 파일입니다. 많이 쓰는 파일이니 기억해두세요.
   그외  HelloWorld-info.plist 가 보이네요. 현재 이 프로젝트의 정보를 담고 있는 파일입니다. 몇몇 설정값을 바꿀수도 있고요 

③ Framework
- 아주 심화적으로 들어가기 전에는 안쓰는 폴더. Xcode 라이브러리가 들어가있는 곳이라 생각하시면 되고요.

⑤ Products - 프로젝트를 컴파일하여 생성된 파일이 있는 곳입니다. 여기도 우리가 쓰는 폴더는 아니예요 조용히 접어주세요.



자 대충 설명이 끝났고 본격적으로 Hello World 를 찍어보겠습니다. Resources 폴더의 MainWindow.xib 을 클릭하세요




여러개의 창이 뜨네요. 인터페이스 빌더라는 건데요 코드로 화면구성을 일일히 다  만들수도 있지만 간편하게 클릭 드래그 등으로 화면구성및 속성을 만들 수 있게 해주는 툴입니다. 
Library 창에 Objects 중에서 View라는 Object가 보이죠 드래그해서 Window 창에 넣어주세요.
이 View는 녀석이 바닥에 든든히 버티고 있어야 이 위에서 무슨 동작을 하든 작동을 할 수 있거든요 ^^




이제 Label 이라는 놈을 드래그 해서 Window 창에 있는 view 녀석 위에 원하는 위치로 올려주세요  
Attributes 창에서 속성이라는지 Label  텍스트를 변경하거나 색을 변경할 수 있습니다. 이것 저것 해보세요 
그리고 버튼 하나를 만들게요 Round Rect Button 을 이쁘게 드래그 해서 원하는 위치에 넣어주세요 그리고 버튼 text도 바껴주세요 저는 push라고 적을게요 


그리고 저장 해주세요 . 이 상태에서 커맨트+R 을 클릭하면 컴파일이 되서 아이폰 시뮬레이터가 나옵니다. 
근데 버튼을 눌려도 아무런 동작을 안할꺼예요 ..  왜냐 아무것도 설정을 안해줬으니깐.. 두둥 이제 코드를 만져보겠습니다.


Classes 폴더에 HelloWorldAppDelegate.h 를 열어주세요.  HelloWorldAppDelegate의 헤더 파일입니다. 
아래와 같이 코딩하세요 

//===========================================================
#import <UIKit/UIKit.h>

@interface HelloWorldAppDelegate : NSObject <UIApplicationDelegate> {
    UIWindow *window;
    UILabel *helloText;  //우리가 아까 만든 Label 에 텍스트를 바꿀꺼기 때문에 UlLabel 로 변수 하는 선언했습니다.
}

- (IBAction)pushbtn:(id)sender;   //pushbtn 액션 동작이 있을꺼라고 알려주는거에요 (버튼 클릭하면 변해야 하기 때문에)

@property (nonatomic, retain) IBOutlet UIWindow *window;
@property (nonatomic, retain) IBOutlet UILabel *helloText;  // 라벨 프로퍼티 선언

@end
//==============================================================


Classes 폴더에 HelloWorldAppDelegate.m 를 열어주세요. 
아래와 같이 코딩하세요

//==================================================================

#import "HelloWorldAppDelegate.h"

@implementation HelloWorldAppDelegate

@synthesize window;
@synthesize helloText;

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

    // Override point for customization after application launch
    sleep(2);   // 처음 화면에서 2초 있다가 실행하게 - 로딩화면 보이게 하기 위해
    [window makeKeyAndVisible];
 
 return YES;
}

- (IBAction)pushbtn:(id)sender
{
 NSString *varText = [[NSString alloc] initWithFormat:@"Hello world~"];   // Hello world~ 라는 문자를  변수에 집어둠 
 
 helloText.text = varText;   // hellodText 라벨 테스트를 varText 변수 값으로 넣으라는 말씀!
 
 [varText release];  //쓴 문자열변수는 초기화
}


- (void)dealloc {
    [window release];
    [helloText release];  //다 쓴 라벨 변수 초기화
    [super dealloc];
}


@end

//====================================================================



코딩이 끝났다면 저장해주시고요  컴파일을 해... 주기 전에 빠뜨린게 있어요
먼가 이상하죠 라벨 helloText를 선언하고 버튼 pushbtn 라고 코딩에 써놨는데 아까 우리가 화면구성한 라벨이  helloText 인지 버튼이 pushbtn  인지.. 설정안해놨거든요. 매칭을 시켜줘야 하는데 !!!!!  그럼 아까 화면 구성했던 곳으로 다시 가보아요

Resources 폴더의 MainWindow.xib 을 클릭하세요




저는 약간 배경색과 위치를 바깠어요-ㅁ-;; 나만의 개성이랄까 크크;
먼저 라벨을 매칭시켜줄게요 
Window 창에 라벨 클릭하고   MainWindow.xlb 라는 창에 Hello World App Delegate 선택하고 
파란색 네모 친곳을 보면 무엇가 아까랑 화면이 달라진게 보일꺼에요 

helloText 라고 생겼죠. 근데 아무런 연결이 안되어 있네요helloText  옆에 동글뱅이 클릭 드래그 해서 라벨과 매칭 시켜주세요!!
연결되는게 보이죠



이번엔 버튼을 매칭 시킬게요
helloText 밑에 밑에 보면 아까  pushbtn 보이시죠 옆에 + 마크 클릭 버튼으로 드래그 하면 화면에서 같이 여러가지 이벤트가 보여요
우리는 버튼 클릭했을 때 보이게 할 것이기 때문에 Touch Down 으로 선택  이제 이쁘게 연결된거 보이죠 

저장 해 줍시다.


그리고 커맨드+R  (또는 상단바에 Build > Build and Run )해서 컴파일 해주면  짜잔..



푸시를 클릭하면 Hello World~ 로 바뀌는 걸 확인 하실 수 있습니다. 



이렇게 간단한 아이폰 앱스를 만들어 봤습니다. 생각보다 쉽죠 ^^~

소스 파일 첨부 할테니 참고하세요 



다음번에는  탭바 / 네비게이션 / 이미지뷰 / 테이블뷰 등등 .. 사용하는 것을 예제와 같이 하나씩 해보도록 할게요


Tip > Resources 폴더에  Default.png (320 *480)  파일과 icon.png (57*57) 파일을 집어 넣으면 앱스 아이콘과 초기 로딩 화면 이 생기는 거 확인 하실 수 있어요.




저작자 표시 비영리 동일 조건 변경 허락
Trackback Address :: http://web2log.com/trackback/32 관련글 쓰기
저자: 에리카 세든 편역: 오형내, 김동현 출판사 소개 페이지 에 자세한 내용이 잘 소개 되어 있습니다. 예제로 시작하는 아이폰 개발 , 사실 저는 이 책을 사지도 않았습니다. 회사 동료가 산 책을 제가 필요해서 멋대로 읽기 시작했습니다. 아무것도 모르고 시작할 때는 그럴듯 해 보였습니다. 예제도 많고 코드도 친절하고 무엇보다 제 동기이자 친구인 '오형내' 이 친구가 번역을 했기 때문에 뭔가 더 뿌듯했습니다. 그런데 문제는 제가 이쪽에 내공이 전..
^^ | 2010/05/04 10:31 | PERMALINK | EDIT/DEL | REPLY
잘 봤습니다. 그런데 맥에서 풀리지 않는 alz 소스 압축파일이 옥의 티네요.
onemanbo | 2010/05/04 14:19 | PERMALINK | EDIT/DEL
좋은 지적 감사합니다^^; 압축 파일 새로올렸습니당!
Name
Password
Homepage
Secret
2010/04/27 15:13

아이폰의 navigationController 의 하단 Toolbar에 이미지 버튼을 넣는 방법입니다.


먼저 팁 전체 소스입니다.

함수 예제 소스를 먼저 보시고 간단히 설명을 하도록 하겠습니다.

============================= 팁 전체소스=================================
- (void)viewWillAppear:(BOOL)animated {

  [super viewWillAppear:animated];
 
  UIToolbar *toolbar = [[UIToolbar alloc] init];
  toolbar.barStyle = UIBarStyleBlackTranslucent; //UIBarStyleBlackOpaque; //UIBarStyleBlackTranslucent;// UIBarStyleDefault;
  [toolbar sizeToFit];
 
  CGFloat toolbarHeight = [toolbar frame].size.height;
  CGRect rootViewBounds = self.parentViewController.view.bounds;
  CGFloat rootViewHeight = CGRectGetHeight(rootViewBounds);
  CGFloat rootViewWidth = CGRectGetWidth(rootViewBounds);
  CGRect rectArea = CGRectMake(0, rootViewHeight - toolbarHeight, rootViewWidth, toolbarHeight);
  [toolbar setFrame:rectArea];
  toolbar.tintColor = [UIColor whiteColor];
  toolbar.translucent = YES;
 
  UIImage *buttonImage = [UIImage imageNamed:@"checkmarkControllerIcon.png"];
  UIButton *button = [UIButton buttonWithType:UIButtonTypeCustom];
  [button setImage:buttonImage forState:UIControlStateNormal];
  [button addTarget:self action:@selector(info_clicked:) forControlEvents:UIControlEventTouchUpInside];
  button.frame = CGRectMake(0, 0, buttonImage.size.width, buttonImage.size.height);
 
  UIBarButtonItem *infoButton = [[UIBarButtonItem alloc] initWithCustomView:button];
 
 
  UIBarButtonItem *flexibleSpace1 = [UIBarButtonItem alloc];
  flexibleSpace1 = [flexibleSpace1 initWithBarButtonSystemItem:UIBarButtonSystemItemFlexibleSpace target:nil action:nil];
 
  UIBarButtonItem *flexibleSpace2 = [UIBarButtonItem alloc];
  flexibleSpace2 = [flexibleSpace2 initWithBarButtonSystemItem:UIBarButtonSystemItemFlexibleSpace target:nil action:nil];
 
  [toolbar setItems:[NSArray arrayWithObjects:flexibleSpace1,infoButton,flexibleSpace2,nil]];
 
  toolbar.hidden = NO;
 
  [self.navigationController.view addSubview:toolbar];

  [infoButton release];
  [flexibleSpace1 release];
  [flexibleSpace2 release];
  [toolbar release];

}


- (void) info_clicked:(id)sender{

  UIAlertView *alert = [[UIAlertView alloc]
    initWithTitle:@"sss"
    message:@"버튼을 클릭하셨네요..."
    delegate:self
    cancelButtonTitle:@"닫기"
    otherButtonTitles:nil];

  [alert show];
  [alert release];
}
============================= 팁 전체소스=================================



위 소스에 대한 간단한 설명 추가합니다.

============================= 소스 설명===================================

//viewWillAppear 이벤트입니다.
- (void)viewWillAppear:(BOOL)animated {

  [super viewWillAppear:animated];  //==> 요건 이벤트 발생후 기본적으로 처리되는 부분입니다.
  

  // Navigationbar의 하단에 들어갈 Toobar를 생성합니다.
  UIToolbar *toolbar = [[UIToolbar alloc] init];
  toolbar.barStyle = UIBarStyleBlackTranslucent; //UIBarStyleBlackOpaque; //UIBarStyleBlackTranslucent;// UIBarStyleDefault;
  [toolbar sizeToFit];


  //생성될 Toolbar의 레이아웃을 설정합니다.
  CGFloat toolbarHeight = [toolbar frame].size.height;
  CGRect rootViewBounds = self.parentViewController.view.bounds;
  CGFloat rootViewHeight = CGRectGetHeight(rootViewBounds);
  CGFloat rootViewWidth = CGRectGetWidth(rootViewBounds);
  CGRect rectArea = CGRectMake(0, rootViewHeight - toolbarHeight, rootViewWidth, toolbarHeight);
  [toolbar setFrame:rectArea];


  //Toolbar의 색상을 설정합니다.
  toolbar.tintColor = [UIColor whiteColor];
  toolbar.translucent = YES;
 

  //Toolbar 를 생성하였으니 버튼을 넣어야 하는데요. 그 버튼을 만들기전에 버튼에 올라갈 이미지버튼을 먼저 만들어야 합니다.

  // 간단히 순서를 알아보면

  //1. 이미지를 생성한다

  //2. 버튼을 생성한다.

  //3. 버튼에 이미지를 올린다.

  //4. 생성한 버튼을 Toolbar에 올린다.

  // 이런 순서입니다.
  UIImage *buttonImage = [UIImage imageNamed:@"checkmarkControllerIcon.png"]; //=>이미지 생성
  UIButton *button = [UIButton buttonWithType:UIButtonTypeCustom];                         //=>버튼 생성
  [button setImage:buttonImage forState:UIControlStateNormal];

  //툴바용 버튼을 생성하고 클릭했을때 실행될 Action을 할당해줍니다. Action에 대한 구현은 아래쪽에 별도로 구현되어있습니다.
  [button addTarget:self action:@selector(info_clicked:) forControlEvents:UIControlEventTouchUpInside];
  button.frame = CGRectMake(0, 0, buttonImage.size.width, buttonImage.size.height);
 
  UIBarButtonItem *infoButton = [[UIBarButtonItem alloc] initWithCustomView:button];  //Toolbar버튼 생성
 
  //요기 부분의 툴바버튼의 경우는 위에서 만든 툴바버튼을 중앙에 오게 하기 위해 만들어지는 버튼입니다.

  //[infoButton]버튼의 양옆으로 하나씩 버튼을 만들어서 놓으면 [infoButton]버튼이 중앙에 오게 됩니다.
  UIBarButtonItem *flexibleSpace1 = [UIBarButtonItem alloc];
  flexibleSpace1 = [flexibleSpace1 initWithBarButtonSystemItem:UIBarButtonSystemItemFlexibleSpace target:nil action:nil];
  UIBarButtonItem *flexibleSpace2 = [UIBarButtonItem alloc];
  flexibleSpace2 = [flexibleSpace2 initWithBarButtonSystemItem:UIBarButtonSystemItemFlexibleSpace target:nil action:nil];
 

  //자 버튼을 모두 만들었으니 Toolbar에 버튼을 올립니다.
  [toolbar setItems:[NSArray arrayWithObjects:flexibleSpace1,infoButton,flexibleSpace2,nil]];
  toolbar.hidden = NO; //=>요건 툴바가 숨겨질건지 보일건지 설정한는 것입니다.
 

  // 마지막으로 Toolbar에 버튼도 올렸으니 NavigationController에 Toolbar를 올려줍니다..
  [self.navigationController.view addSubview:toolbar];


  // 모든 일은 마무리 했습니다..

  // 이제 메모리에 할당되었던 것들은 모두 지워줍니다..

  [infoButton release];
  [flexibleSpace1 release];
  [flexibleSpace2 release];
  [toolbar release];

}



// 요 Action은 위의 Toolbar버튼에 연결되는 이벤트입니다..

- (void) info_clicked:(id)sender{

  UIAlertView *alert = [[UIAlertView alloc]
    initWithTitle:@"sss"
    message:@"버튼을 클릭하셨네요..."
    delegate:self
    cancelButtonTitle:@"닫기"
    otherButtonTitles:nil];

  [alert show];
  [alert release];
}
============================= 소스 설명 ==================================


처음 개발을 시작할 때 찾기 어려운 정보라 힘들었던 부분이었습니다.
도움이 되시길 바랍니다. ^^*

Trackback Address :: http://web2log.com/trackback/27 관련글 쓰기
Name
Password
Homepage
Secret
2010/04/27 14:34

아이폰 개발과 관련해서 조금 더 기본적인 포스팅이 필요하다는 생각에 아주아주 기초부터 이야기 해보려고 합니다. 걸음마 부터 이야기니까요 이미 떼신 분들은 필요가 없겠습니다. 그럼 시작할께요.

1. 우선 맥북 이 필요하겠죠? 

- 아이폰 어플은  맥 프로그래밍을 기본으로 이뤄지기 때문에  맥북에서만 개발을 진행 할 수 있습니다.
편법으로 [해킨토시] 라고 해서 윈도우 기반에서 맥 OS를 돌릴 수 있는 방법으로 개발 하시는 분도 계시기는 하지만 현저히 차이나는 속도와 속터짐으로 결국 맥북을 사신다는 후일담을 들을 수 있습니다. ㅠㅠ


2. 맥 OS를 10.6.2  이상으로 업그레이드 시켜주셔야 합니다 

 - 업그레이드는 아래 스샷을 보고 설명하자면... 그냥 누르면 됩니다.



3. 애플 개발자 센터에서 SDK를 다운 받아주세요  ( 
http://developer.apple.com )

- 어플을 등록 하기 위해서는 개발자 라이센스를 사야하지만 일단 개발만을 위해서 SDK를 다운받을 거라면 애플 아이디 만으로 다운이 가능합니다 ^^  다운받는 곳은 스샷을 확인해 주세요.

☞우측 상단에 보시면 개발자를 위해 SDK4 beta버전도 받으실 수 있습니다.


4. 다운 받으셨으니 설치 ㄱㄱㄱ 

- 설치 하실 때 구성요소에서 SDK 체크 하시고 넘어가주세요~ 


5. 이제 XCODE 를 작동해 보아요 

- XCODE 는 아이폰/맥용 어플리케이션을 만드는 프로그래밍 툴이랍니다.  근데 이놈이 어디에 설치 되어 있는지 모르시겠다고요
맥 OS 상단의 파일 > 파일 열기

-  자신의 하드 디스크 선택  > Developer  > Applications > Xcode 
☞ 항상 위에 경로로 통해 가는 것도 좋지만 Xcode 아이콘을 드래크해서 Dock에 올려놓으면 편하게 갈수 있겠죠~ *^^* 올려놓으면 저런 망치모양의 아이콘이 생성됩니다.



이제 아이폰 개발하기 위한 준비 과정을 마쳤습니다.

이제 개발만 하면 되죠!!!!! 언제 하지 ㅠ_ ㅜ

다음 번에는 Xcode 작동 맛보기 예로 아주 간단히  프로그래밍의 친구 Hello world 를 찍어보도록할게요 *^^*
저작자 표시 비영리 동일 조건 변경 허락
Trackback Address :: http://web2log.com/trackback/26 관련글 쓰기
midas | 2010/04/27 21:03 | PERMALINK | EDIT/DEL | REPLY
알기 쉽게 설명해주셔서 감사합니다. 관심은 생기는데 막상 어디부터 손대야하는지 막막하네요 ^^;;
과연 내가 프로그래밍이란걸 할 수 있을까 머 이런 긴장감도 들구...
web2log | 2010/04/27 21:10 | PERMALINK | EDIT/DEL
시작은 다 똑같습니다. 프로그래밍은 꾸준히 노력할 수 있는지 없는지가 관건입니다. 화이팅입니다~
이우아 | 2010/04/28 05:24 | PERMALINK | EDIT/DEL | REPLY
아이폰 어플 개발에 약간(?) 관심이 있는데...
매우 친절한 글이에요. ㅎㅎ
다음 글 기대할께요. ^^
web2log | 2010/04/28 09:01 | PERMALINK | EDIT/DEL
관련 포스트 이것저것 준비중이에요. 기대해주세요~
네모난달 | 2010/04/28 07:17 | PERMALINK | EDIT/DEL | REPLY
저도 언젠가 아이폰앱을 만들어보리라 꿈을 꾸고 있는데. 이렇게 개발과정을 보여주시면 정말 도움이 많이되겠네요. 앞으로도 잘부탁드려요^^
web2log | 2010/04/28 09:01 | PERMALINK | EDIT/DEL
차근차근 해나가보겠습니다. 자주 방문해 주세요.
무필명 | 2010/04/28 09:26 | PERMALINK | EDIT/DEL | REPLY
저도 앱한번 만들고 싶긴한데...

제가 필요한걸 만들고 싶은터라...그렇다고 맥컴퓨터를 살수도없고...

맥없으면 개발 못하나요??
onemanbo | 2010/04/28 09:31 | PERMALINK | EDIT/DEL
기본적으로 맥이 없으면 개발이 불가능한 더러운 세상입니다 ㅜㅜ
흠.. | 2010/04/28 09:33 | PERMALINK | EDIT/DEL | REPLY
만약 ms에서 윈도우용 모든 프로그램은 ms에 만든개발툴과 언어로만 만들어야 된다고 그랬으면
정말 사람들 광분했을텐데
애플은 너무나도 당연하다는듯이 말하는게 좀 웃기네요
특히 소위 개발자란 분들이...
web2log | 2010/04/28 09:46 | PERMALINK | EDIT/DEL
맥북을 살 때는 "이런 더러운 애플 녀석들..너무 하는구만."하면서 씩씩댔었죠. MS보다 더 크면 더할 놈들이다라고 생각한 건 저만은 아니겠죠? 이에 비하면 안드로이드는 시스템의 개방성에 있어서나 환경에 있어서나 '천사'에 가깝습니다. 안드로이드 개발 관련한 내용도 포스팅할 예정입니다. 방문 감사드립니다.
송현우 | 2010/06/24 13:01 | PERMALINK | EDIT/DEL | REPLY
블로그에 담아갈게요 ^^

출처는 밝히겠습니다.

원하지 않으시면 삭제할게요~

제 블로그는 blog.naver.com/no2zero 입니다.
띨한꼼딱 | 2010/06/24 20:13 | PERMALINK | EDIT/DEL | REPLY
우문을 하나 드립니다
엡개발에 있어 아이폰과 안드로이드 중 선택해야 한다면 현재로선 아이폰이 우세하다고 하더군요.
하지만 안드로이드의 개방성으로 인한 편리함이 더 큰 경쟁력을 가질거라고 하는 얘길 많이 합니다.
지금 시작한다면 아이폰과 안드로이드 어느 쪽을 선택해야 할까요?
부레이부레이 | 2011/05/10 18:06 | PERMALINK | EDIT/DEL | REPLY
당연히 아이폰이 우선임.
안드로이드는 자바기반이고 아이폰은 c언어.
c컴파일된 실행파일과 자바 가상머신은 수행되는 환경 자체부터가 엄청난 차이가 있지요 오버헤드랄까...
하기야 하드웨어가 워낙 좋아서 그 차이를 망각할수도 있기는 한데
정작 차이는 혹독한 테스팅환경에서 소리없이 나타납니다.
예를들어 초당 병렬처리해야할 데이타가 10만개 정도가 된다고 할때에
이것을 최적화 하기 위해서는 low레벨까지 가야할 필요가 있는데
당연히 c가 좋지요. 어차피 목표는 고급 응용프로그래밍이잖아요? 3차원 핸들링하고.. 데이타 뿌리고..
gps랑 wifi로 통신하고.. 사운드에 그래픽도 뿌려줘야하니까.
당연히 아이폰으로 먼저 여러 api와 프레임웍 등의 기본개념을 익히고 상용 어플리케이션을 개발할정도가 된 이후에
안드로이드로 병행해도 상관이 없음.
Name
Password
Homepage
Secret
2010/04/22 15:14

아이폰어플 개발에서 흔히 사용되는 alert 함수 사용법입니다.
일반 응용프로그램이나 웹어플에서는 아주 간단히 사용하는 alert기능을 iphone에서는 꽤나 복잡하게 사용하는 듯합니다.
 
일단 아래 함수 예제 소스를 먼저 보시고 간단히 설명을 하도록 하겠습니다.

============================== 예제 소스 ============================
UIAlertView *alert = [[UIAlertView alloc] initWithTitle:@"메세지 타이틀"
        message:@"메세지 내용"
        delegate:self
        cancelButtonTitle:@"Cancel"
        otherButtonTitles:nil];
[alert show];
[alert release];
===================================================================
 
위에 소스에 대해 간단히 설명을 붙여보겠습니다.
=============================== 예제 설명 ==========================

UIAlertView *alert = [[UIAlertView alloc]  => alert변수 선언과 메모리 할당 (alloc)
        initWithTitle:@"메세지 타이틀"   => 메모리 할당후 alert창의 타이틀 세팅
        message:@"메세지 내용"    => alert창의 메세지 내용 세팅
        delegate:self     => 딜리게이트 할당 (alert창이 뜨게 해주는 부모창 정도로 생각하면 됩니다.)
        cancelButtonTitle:@"Cancel"    => 취소버튼 타이틀
        otherButtonTitles:nil];     =>기타 다른 버튼의 타이틀
 
===================================================================
 요기까지가 alert창을 생성한것입니다. 생성만 했을 뿐이라 실제로 보여지는 것은 아니지요..^^

[alert show];            => 위에서 생성한 alert를 실제로 나타나게 하는 메소드입니다.
[alert release];         => 생성한 메소드를 보여주었으니 메모리에서 지워버려야 합니다.
===================================================================

Iphone에서 자주 사용되고 어렵지 않게 쓰는 함수를 장황하게 설명했습니다.
하지만 이런 간단한 함수의 구조를 잘 파악해두면 다른 함수나 객체를 사용할때 코드의 이해력을 높을 수 있으리라 생각됩니다.

저작자 표시 비영리 동일 조건 변경 허락
Trackback Address :: http://web2log.com/trackback/18 관련글 쓰기
Tracked from 자바,아이폰 공부하자~!! | 2010/08/25 10:24 | DEL
ㄹㄹ
Name
Password
Homepage
Secret
prev"" #1 #2 next