자마린(Xamarin)

[자마린학원/자마린동영상/자마린교육]3. xamarin.i os 3.3 xamarin.ios helloworld 자세히 살펴보…

3.4.4 View Controllers and the View Lifecycle

Content View Hierachy : View Controller 의해 관리되는 View or Subview 스택이다.

View ControllerContent View Hierachy 안에 있는 View들을 관리하는 역할을 한다.

View ControllerScene의 아래 검정색 BarStoryboard안에 표현된다.

Content View Hierachy에 대해 사용자 정의 View Controller를 정의할 수 있는데 속성창의 Identity안의 Class 속성에서 지정할 수 있다.

ViewControllerUIViewController의 하위 클래스로 아래와 같이 기본 모양을 가진다.

 

 

 

 

public partial class ViewController : UIViewController

{

public ViewController (IntPtr handle) : base (handle)

{

}

ViewLifecycle 이벤트

View ControllerWindow로부터 Content View Hierarchy의 요소들을 로딩하거나 언로딩 한다. Content View Hierachy안의 View에서 발생되는 중요한 일에 대해 View의 라이프 사이클

동안 OS는 이벤트를 통해 View Controller에 알린다.

 

View Controller가 메모리에 Content View Hierarchy를 로드하는 시점에 한번 호출된다.}

View ControllerViewContent View Hierarchy에 추가되어 화면에 나타날때 마다 호출된다.(OnStart)

View ControllerViewContent View Hierarchy에서 제거되어 화면에서 사라질 때마다 호출된다. 주로 화면 Clear 또는 저장하는 경우에 사용된다.

and ViewContent View Hierarchy에서 추가되거나 제거될 때 호출된다.

사용자의 상호작용에 대한 응답 : View Controller의 가장 중요한 역할은 버튼 조작, 탐색 등과 같은 사용자 상호 작용에 응답하는 것이다. 사용자 상호 작용을 처리하는 가장 간단한 방법은 컨트롤을 연결하여 사용자 요청/입력을 받고 응답하는 이벤트 핸들러를 만들어 연결하는 것인데 Hello iOS 예제처럼 버튼을 터치하여 터치 이벤트에 응답 할 수 있다.

Properties 창에서 Button 컨트롤에 Name을 할당하면, iOS 디자이너는 ViewController 클래스의 내부에서 사용할 수 있도록 ViewController.designer.cs의 컨트롤에 자동으로 매핑한다. View LifecycleViewDidLoad 단계에서 컨트롤이 먼저 사용 메서드 내에서 사용자의 터치에 응답 할 준비를 하는 것이다.

 

public override void ViewDidLoad ()

{

base.ViewDidLoad ();

 

// wire up TranslateButton here

본 교재의 Xamarin.iOS HelloWorld에서는 TouchUpInside라는 터치 이벤트를 사용하여 사용자의 터치에 대한 처리를 하는데 TouchUpInside는 컨트롤 범위 내에서 터치 다운 (화면을 터치하는 손가락)을 수행하는 터치 업 이벤트 (화면에서 손가락이 들리는 동작)를 수신한다.

TouchUpInside의 반대는 사용자가 컨트롤을 눌렀을 때 발생하는 TouchDown 이벤트로 TouchDown 이벤트는 많은 노이즈를 캡처하고 손가락을 컨트롤에서 밀어서 터치를 취소 할 수있는 옵션을 제공하지 않는다. TouchUpInside는 버튼 터치에 응답하는 가장 일반적인 방법이다.

람다를 사용하여 CallButtonTouchUpInside 이벤트를 처리한 모양이다.

 

// View Controller는 화면으로부터 Content View Hierarchy의 요소들을 로딩하거나 언로딩 한다. Content View Hierachy안의 View에서 발생되는 중요한 일에 대해 View의 라이프 사이클 동안 OS는 이벤트를 통해 View Controller에 알린다.

// ViewDidLoad : View Controller가 메모리에 Content View Hierarchy를 로드하는 시점에 한번 호출하며 Xamarin.AndroidOnCreate 콜백함수와 같은 기능을 한다

public override void ViewDidLoad()

{

base.ViewDidLoad();

 

// 전화번호 입력창에 포커싱이 된 경우 키보드를 화면에서 사라지게 하기위해

PhoneNumberText.ResignFirstResponder();

CallButton.TouchUpInside += (object sender, EventArgs e) =>

{

var url = new NSUrl("tel:" + PhoneNumberText.Text);

// Use URL handler를 호출하는데 "tel:" 키워드는 애플의 Phone app을 호출하고 그렇지 않으면 경고창을 띄운다. 본 예제는 시뮬레이터에서 동작하므로 경고창이 로드된다.

if (!UIApplication.SharedApplication.OpenUrl(url))

{

//경고창을 띄운다.

var alert =

UIAlertController.Create("Not Supported", "Schema 'tel:' is not supported on this device",

UIAlertControllerStyle.Alert);

alert.AddAction(UIAlertAction.Create("OK", UIAlertActionStyle.Default, null));

PresentViewController(alert, true, null);

}

};

}

Comments