[iPhone][MonoTouch] 다섯번째 샘플 : Count Me In (1)

이번 예제는 UIButton, UILabel 그리고 UIImageView의 간단한 사용 방법에 대해서 배울 수 있습니다. 이전 예제와 크게 다른 것이 없죠.

Appsamuck 샘플 : CountMeIn

예제에 대해서 설명을 하면, (+)버튼을 클릭하면 상단의 숫자가 1씩 999까지 증가하고, (-)버튼을 클릭하면 반대로 1씩 0까지 감소합니다. 이전 예에서도 있던 (i)버튼을 클릭하면 화면을 전환하여 다른 뷰를 보여줍니다.

화면의 UI구성은 Interface Builder에서 모두 이루어지므로 코드의 부담은 없습니다. 다만 MonoTouch의 버그인지 모르겠지만, 뷰의 크기가 제대로 반영되지 않는 것 같습니다. 해결하기 위해 원 예제에는 없는 위치 조정 코드를 추가 했습니다.

 어플리케이션에 필요한 이미지들입니다.  왼쪽부터 icon.png , backgroundPattern.png, iconGreenAdd.png, iconRedSubtract.png 이름으로  다운 받아 둡니다.





1.  MonoDevelop을 실행합니다. "CountMeIn"이름으로 새 솔루션을 생성합니다.
2. 솔루션에 뷰 컨트롤러를 관리하기 위한 디렉토리를 생성합니다. 
메뉴를 선택하고 "ViewController"이름으로 디렉토리를 생성합니다.
3. ViewController 디렉토리에 새파일을 추가 합니다. 
iPhone그룹에서 "View Interface Definition with Controller" 타입을 선택합니다. "RootViewController" 이름을 지정하고 생성합니다.
다음 그림과 같이 3개의 파일이 생성됩니다.

같은 방법으로 "MainViewController"와 "FlipsideViewController" 이름으로 뷰 컨트롤러를 추가합니다. 추가 된 최종 화면은 다음과 같습니다.
MonoDevelop 개발툴의 화면 처리가 아직은 불안정 합니다. 파일을 추가 한 결과가 보는 것과 다르게 나오는 경우가 있는데, 그런 경우는 솔루션을 종료 했다가 다시 읽어 들이면 정상적으로 표시 됩니다.

4. Interface Builder를 실행하여 MainWindow.xib를 열고 서브 뷰로서 RootViewController를 연결합니다. 
Library에서 UIViewController를 Drag&Drop으로 추가 합니다. Type은 "RootViewController"로 변경합니다. 컨트롤러에 뷰를 추가하고 버튼을 배치합니다. 버튼의 Type은 "Info Light"로 선택합니다.  최종 화면은 다음과 같습니다.
버튼을 이용하기 위해 Outlet(infoButton)과 Action(toggleView)을 설정합니다. RootViewController의 Identity 윈도우와 같이 설정합니다.
설정된 각 Outlet과 Action을 버튼과 버튼의 이벤트에 연결시키면 다음과 같습니다.
RootViewController를 Main에서 접근하기 위해 AppDelegate에 Outlet(rootViewController)를 설정하고 연결 합니다. 
진행된 내용을 저장하고 Interface Builder를 닫습니다. MainWindow.xib.designer.cs파일을 편집기로 열고 Outlet과 Action의 설정을 확인 할 수 있습니다. 

이제 RootViewController를 Window의 서브뷰로 등록하기 위해 Main.cs를 편집기로 읽어 들입니다. 
	// The name AppDelegate is referenced in the MainWindow.xib file.
public partial class AppDelegate : UIApplicationDelegate
{
// This method is invoked when the application has loaded its UI and its ready to run
public override bool FinishedLaunching (UIApplication app, NSDictionary options)
{
// If you have defined a view, add it here:
// window.AddSubview (navigationController.View);
window.AddSubview(rootViewController.View);

window.MakeKeyAndVisible ();

return true;
}

// This method is required in iPhoneOS 3.0
public override void OnActivated (UIApplication application)
{
}
}
window.AddSubview()함수를 호출하여 RootViewController.View를 추가합니다. 

5. MainViewController.xib를 Interface Builder에서 열고 화면 설계를 합니다.  먼저 다운 받아 두었던 이미지들을 솔루션에 추가합니다. 화면에서 보는 것과 같이 이미지의 빌드 옵션을 "Content"로 설정합니다. 
처음 추가 했을 때의 빌드는 "Nothing"으로 되어 있습니다. 말그대로 아무것도 하지 않기 때문에 빌드 시에 어플리케이션 폴더로 복사되지 않습니다. 반드시 설정을 변경해 주도록 합니다.  개발 환경(MonoDevelop)에서 자동으로 처리해 주지 않기 때문에 프로그램에 영향을 주는 리소스는 주의해야 합니다. 

MainViewController.xib에 다음과 같이 화면 설계를 합니다.  
Objects속성
UIImageViewImage : backgroundPattern.png
Size : x=0, y=0, width=320, height=460
UITextFieldtype : Bezel Style
Size : x=20, y=20, width=280, height=118
UILabelText : 9999
Size : x=30, y=30, width=261, height=100
UIButtonType : Custom Buttom
Image : iconGreenAdd.png
Size : x=20, y=288, width=100, height=100
UIButtonType : Custom Buttom
Image : iconRedSubtract.png
Size : x=200, y=288, width=100, height=100

Interface Builder와 MonoDevelop사이의 리소스 공유가 지원이 안되기 때문에 화면 설계시 이미지는 표시가 되지 않습니다. 이미지 확인이 안되는 어려움이 있지만, 실행에는 이상이 없습니다. 다음은 Outlet과 Action의 추가입니다. 
MainViewController.xib의 File's Owner에 화면처럼 Outlet과 Action을 추가합니다.  
객체에 각각 연결을 해 줍니다.  counter는 UILable, addUnit과 subtractUnits는 UIButton의 "Touch Up Inside"에 연결합니다. 결과를 저장합니다. 

6. MainViewController의 화면 표시와 각 이벤트에 대한 코드를 추가합니다. 
RootViewController.xib.cs파일을 편집기로 읽어 들입니다. 클래스 RootViewController의 멤버로서 MainViewController를 지정합니다.
	public partial class RootViewController : UIViewController
{
MainViewController mainViewController;
...
ViewDidLoad() 함수를 override하여 생성합니다. 함수에 MainViewController를 생성하고 서브 뷰로서 추가해 줍니다. 
		public override void ViewDidLoad ()
{
base.ViewDidLoad ();

mainViewController = new MainViewController();

this.View.InsertSubviewBelow(mainViewController.View, infoButton);
}
여기까지 작업으로 메인 뷰를 화면에 표시하는 것까지 완료 했습니다.  다음엔 FlipsideViewController의 간단한 화면 설계와 실제 숫자를 카운트하는 동작을 추가해 보겠습니다.

---
MonoTouch와 MonoDevelop의 업데이트가 있었습니다. 해당 홈페이지를 참고하세요.

by 연서아빠 | 2009/10/11 12:24 | iPhone | 트랙백 | 핑백(1) | 덧글(0)

트랙백 주소 : http://neojjang.egloos.com/tb/1957431
☞ 내 이글루에 이 글과 관련된 글 쓰기 (트랙백 보내기) [도움말]
Linked at IT 프로를 향한 조건? : .. at 2009/10/15 00:13

... 지난 설명에 이어서 마무리 해 봅니다.[iPhone][MonoTouch] 다섯번째 샘플 : Count Me In (1) 7. FlipsideViewController.xib파일을 Interface Builder로 열고 화면 설계를 하죠. 간 ... more

:         :

:

비공개 덧글

◀ 이전 페이지 다음 페이지 ▶