Creative/모바일 2011/02/08 00:37
해당 포스팅은 위키북스의 아이폰3 프로그래밍
교재를 기반으로 학습한 내용이며
온라인 교육에 따른 결과 내용을 정리한 것으로 가급적 참고로만 보시길 바랍니다.
혹시나 동일한 교육내용으로 검색을 통해 들어오신 분이라면
직접 해보시길 권해 드립니다.
--------------------------------------------------------------------------------
다음은 경고창 구현에 관한 문항입니다. 본서 내용을 참조하여 프로젝트를 생성하고, 지시사항대로 데이터를 작성하시오.
다음은 buttonPressed 메서드이다. 사용자가 취소버튼을 누르지 않았음을 보장하는 코드와 텍스트 필드의 입력값 유무에 따라 경고 시트에 출력값을 결정하는 코드는 무엇인가?
- (void)actionSheet:(UIActionSheet *)actionSheet
didDismissWithButtonIndex:(NSInteger)buttonIndex
{
if (buttonIndex != [actionSheet cancelButtonIndex])
{
NSString *msg = nil;
if (nameField.text.length > 0)
msg = [[NSString alloc] initWithFormat:
@"You can breathe easy, %@, everything went ok.",
nameField.text];
else
msg = @"You can breathe easy, everything went ok.";
//.....
취소버튼의 탭유무 :
if (buttonIndex != [actionSheet cancelButtonIndex])
입력값의 표시유무 :
NSString *msg = nil;
if (nameField.text.length > 0)
msg = [[NSString alloc] initWithFormat:
@""You can breathe easy, %@, everything went ok."", nameField.text];
else
msg = @""You can breathe easy, everything went ok."";
사용자에게 무언가를 알리고 버튼하나만 제공하는 경고창을 구현하고, 코드 중 delegate 설정에서 self와 nil의 차이점에 대해서 설명하시오.
경고 뷰도 델리게이트를 가질 수 있는데 만약 사용자가 경고창을 닫거나 어떤 버튼을 탭했는지 알고 싶으면 액션시트에서 했듯이 self 를 델리케이트로 설정해야 한다. 그렇게 하려면 이 클래스는UIAlertViewDelegate 프로토콜을 따라야 하고 프로토콜의 메서드 중 몇 개를 구현해야 한다.
사용자에게 무언가를 알리고 사용자에게 버튼 하나만 제공할 경우 어떤 버튼을 탭할지 알고 있으니 언제 버튼이 탭됐는지 별로 신경쓸 필요가 없다. 그렇게 때문에 델리게이트를 그냥 nil로 지정해서 사용자가 경고뷰를 닫을 때 알려줄 필요가 없다는 것을 알린다.
결론적으로, 어떤 버튼을 탭했는지 정보를 전달하기위해서는 self를 전달할 필요가 없을 경우는 nil 을 이용하면 된다.
다음은 멀티뷰 애플리케이션에 관한 문항입니다. 본서 내용을 참조하여 새 프로젝트를 생성하고, 지시사항대로 데이터를 작성하시오.
뷰 스위처를 만들기 위한 프로젝트를 생성한 후, 애플리케이션에서 필요한 뷰 컨트롤러와 nib 파일을 생성하는 과정에 대해서 설명하시오
뷰 컨트롤러 생성 과정: Groups&Files창의 Classes폴더를 클릭하고 File 메뉴의 New File을 선택한 후 Cocoa Touch Class를 선택하면 여러개의 클래스가 나타나는데 그 중 UIView Controller subclass를 선택하고 XIB for user interface라는 옵션의 체크를 해제합니다. Next를 클릭한 후 SwitchViewController.m이라고 입력합니다.
nib 파일 생성과정: Groups&Files 창의 Resources폴더를 클릭하고 File 메뉴의 New File를 선택합니다. 보조 창이 뜨면 iPhone OS의 User Interfaces를 선택한 후 콘텐츠 뷰와 nib를 만들어 주는 ViewXIB 아이콘을 선택합니다. Next 버튼을 클릭한 후 파일 이름을 BlueView.xib라고 입력합니다.
조건 1의 과정을 거친 후 애플리케이션 메인 윈도우에 최상위 컨트롤러의 뷰를 추가하는 코드를 작성하기 위해 아웃렛이 필요한데 Groups&File창의 View_SwitcherAppDelegate.h 파일을 열어 코드를 수정하시오.
#import <UIkit/UIkit.h>
@class SwitchViewController;
@interface View_SwitcherAppDelegate : Nsobject <UIApplicationDelegate>{
UIwindow *window;
SwitchViewController *switchViewController;
}
@property (nonatomic, retain) IBOutlet UIWindow *window;
@property (nonatomic, retain) IBOutlet SwitchViewController
*switchViewController;
@end
다음은 하나의 레이블과 2개의 버튼을 가진 애플리케이션의 구현에 관한 문항입니다. 본서 내용을 참조하여 새 프로젝트를 생성하고, 지시사항대로 데이터를 작성하고 최종결과물을 이미지 파일로 첨부하시오.
모델-뷰-컨트롤러(MVC, Model-View-Controller)의 기능적인 특징에 대해서 기술하고, 아웃렛과 액션에 대해서 설명하시오
1. MVC 모델의 기능적 특징
- 모델: 애플리케이션의 데이터를 저자하는 클래스
- 뷰: 윈도우, 컨트롤과 같이 사용자가 눈으로 볼 수 있고 상호작용할 수 있는 요소들로 구성
- 컨트롤러: 모델과 뷰를 서로 연결하고 사용자의 입력을 어떻게 처리할지 결정하는 애플리케이션로직
2. 아웃렛: IBOutlet키워드를 사용하여 선언하는 인스턴스 변수
3. 액션: 컨트롤러 클래스에 포함된 메서드
두개의 버튼 중 하나가 눌러졌을 경우 알려주는 buttonPressed: 메서드를 선언하여, 어느 버튼이라도 클릭되면 호출되는 액션 메서드를 구현하시오.
-(IBAction)buttonPressed: (id)sender {
Nsstring *title = [sender titleForState:UIControlStateNormal]
Nsstring *newText = [[NSString alloc] initWithFormat:
@”%@ button pressed.”,title];
statusText.text = newText;
[newText release];
}
조건2에서 작성한 코드 내용 중 title 값을 가지고 새로운 문자열을 만드는 것으로 Left 버튼을 누르면 "Left button pressed."를 출력하는 코드는 무엇인가?
Nsstring *newText = [[NSString alloc] initWithFormat:
@”%@ button pressed.”,title];
인터페이스 빌더를 이용하여 Left, Right 버튼을 만들고, View의 하단에 레이블을 추가하여 둘 중 한 버튼을 누르면 Left(or Right) button pressed란 문자열을 보여주는 출력화면을 작성하시오.

교재를 기반으로 학습한 내용이며
온라인 교육에 따른 결과 내용을 정리한 것으로 가급적 참고로만 보시길 바랍니다.
혹시나 동일한 교육내용으로 검색을 통해 들어오신 분이라면
직접 해보시길 권해 드립니다.
--------------------------------------------------------------------------------
다음은 경고창 구현에 관한 문항입니다. 본서 내용을 참조하여 프로젝트를 생성하고, 지시사항대로 데이터를 작성하시오.
다음은 buttonPressed 메서드이다. 사용자가 취소버튼을 누르지 않았음을 보장하는 코드와 텍스트 필드의 입력값 유무에 따라 경고 시트에 출력값을 결정하는 코드는 무엇인가?
- (void)actionSheet:(UIActionSheet *)actionSheet
didDismissWithButtonIndex:(NSInteger)buttonIndex
{
if (buttonIndex != [actionSheet cancelButtonIndex])
{
NSString *msg = nil;
if (nameField.text.length > 0)
msg = [[NSString alloc] initWithFormat:
@"You can breathe easy, %@, everything went ok.",
nameField.text];
else
msg = @"You can breathe easy, everything went ok.";
//.....
취소버튼의 탭유무 :
if (buttonIndex != [actionSheet cancelButtonIndex])
입력값의 표시유무 :
NSString *msg = nil;
if (nameField.text.length > 0)
msg = [[NSString alloc] initWithFormat:
@""You can breathe easy, %@, everything went ok."", nameField.text];
else
msg = @""You can breathe easy, everything went ok."";
사용자에게 무언가를 알리고 버튼하나만 제공하는 경고창을 구현하고, 코드 중 delegate 설정에서 self와 nil의 차이점에 대해서 설명하시오.
경고 뷰도 델리게이트를 가질 수 있는데 만약 사용자가 경고창을 닫거나 어떤 버튼을 탭했는지 알고 싶으면 액션시트에서 했듯이 self 를 델리케이트로 설정해야 한다. 그렇게 하려면 이 클래스는UIAlertViewDelegate 프로토콜을 따라야 하고 프로토콜의 메서드 중 몇 개를 구현해야 한다.
사용자에게 무언가를 알리고 사용자에게 버튼 하나만 제공할 경우 어떤 버튼을 탭할지 알고 있으니 언제 버튼이 탭됐는지 별로 신경쓸 필요가 없다. 그렇게 때문에 델리게이트를 그냥 nil로 지정해서 사용자가 경고뷰를 닫을 때 알려줄 필요가 없다는 것을 알린다.
결론적으로, 어떤 버튼을 탭했는지 정보를 전달하기위해서는 self를 전달할 필요가 없을 경우는 nil 을 이용하면 된다.
다음은 멀티뷰 애플리케이션에 관한 문항입니다. 본서 내용을 참조하여 새 프로젝트를 생성하고, 지시사항대로 데이터를 작성하시오.
뷰 스위처를 만들기 위한 프로젝트를 생성한 후, 애플리케이션에서 필요한 뷰 컨트롤러와 nib 파일을 생성하는 과정에 대해서 설명하시오
뷰 컨트롤러 생성 과정: Groups&Files창의 Classes폴더를 클릭하고 File 메뉴의 New File을 선택한 후 Cocoa Touch Class를 선택하면 여러개의 클래스가 나타나는데 그 중 UIView Controller subclass를 선택하고 XIB for user interface라는 옵션의 체크를 해제합니다. Next를 클릭한 후 SwitchViewController.m이라고 입력합니다.
nib 파일 생성과정: Groups&Files 창의 Resources폴더를 클릭하고 File 메뉴의 New File를 선택합니다. 보조 창이 뜨면 iPhone OS의 User Interfaces를 선택한 후 콘텐츠 뷰와 nib를 만들어 주는 ViewXIB 아이콘을 선택합니다. Next 버튼을 클릭한 후 파일 이름을 BlueView.xib라고 입력합니다.
조건 1의 과정을 거친 후 애플리케이션 메인 윈도우에 최상위 컨트롤러의 뷰를 추가하는 코드를 작성하기 위해 아웃렛이 필요한데 Groups&File창의 View_SwitcherAppDelegate.h 파일을 열어 코드를 수정하시오.
#import <UIkit/UIkit.h>
@class SwitchViewController;
@interface View_SwitcherAppDelegate : Nsobject <UIApplicationDelegate>{
UIwindow *window;
SwitchViewController *switchViewController;
}
@property (nonatomic, retain) IBOutlet UIWindow *window;
@property (nonatomic, retain) IBOutlet SwitchViewController
*switchViewController;
@end
다음은 하나의 레이블과 2개의 버튼을 가진 애플리케이션의 구현에 관한 문항입니다. 본서 내용을 참조하여 새 프로젝트를 생성하고, 지시사항대로 데이터를 작성하고 최종결과물을 이미지 파일로 첨부하시오.
모델-뷰-컨트롤러(MVC, Model-View-Controller)의 기능적인 특징에 대해서 기술하고, 아웃렛과 액션에 대해서 설명하시오
1. MVC 모델의 기능적 특징
- 모델: 애플리케이션의 데이터를 저자하는 클래스
- 뷰: 윈도우, 컨트롤과 같이 사용자가 눈으로 볼 수 있고 상호작용할 수 있는 요소들로 구성
- 컨트롤러: 모델과 뷰를 서로 연결하고 사용자의 입력을 어떻게 처리할지 결정하는 애플리케이션로직
2. 아웃렛: IBOutlet키워드를 사용하여 선언하는 인스턴스 변수
3. 액션: 컨트롤러 클래스에 포함된 메서드
두개의 버튼 중 하나가 눌러졌을 경우 알려주는 buttonPressed: 메서드를 선언하여, 어느 버튼이라도 클릭되면 호출되는 액션 메서드를 구현하시오.
-(IBAction)buttonPressed: (id)sender {
Nsstring *title = [sender titleForState:UIControlStateNormal]
Nsstring *newText = [[NSString alloc] initWithFormat:
@”%@ button pressed.”,title];
statusText.text = newText;
[newText release];
}
조건2에서 작성한 코드 내용 중 title 값을 가지고 새로운 문자열을 만드는 것으로 Left 버튼을 누르면 "Left button pressed."를 출력하는 코드는 무엇인가?
Nsstring *newText = [[NSString alloc] initWithFormat:
@”%@ button pressed.”,title];
인터페이스 빌더를 이용하여 Left, Right 버튼을 만들고, View의 하단에 레이블을 추가하여 둘 중 한 버튼을 누르면 Left(or Right) button pressed란 문자열을 보여주는 출력화면을 작성하시오.

http://kimjinwoo.com/trackback/136
Button_fun2ViewController.m


0