Xamarin.Mac의 경고

이 문서에서는 Xamarin.Mac 애플리케이션에서 경고 작업을 다룹니다. C# 코드에서 경고를 만들고 표시하고 사용자 상호 작용에 응답하는 방법을 설명합니다.

Xamarin.Mac 애플리케이션에서 C# 및 .NET으로 작업할 때 개발자가 작업하는 것과 Xcode에서 수행하는 것과 동일한 경고에 Objective-C 액세스할 수 있습니다.

경고는 심각한 문제(예: 오류) 또는 경고(예: 파일 삭제 준비)가 발생할 때 나타나는 특별한 유형의 대화 상자입니다. 경고는 대화 상자이므로 닫기 전에 사용자 응답도 필요합니다.

An example alert

이 문서에서는 Xamarin.Mac 애플리케이션에서 경고로 작업하는 기본 사항을 설명합니다.

경고 소개

경고는 심각한 문제(예: 오류) 또는 경고(예: 파일 삭제 준비)가 발생할 때 나타나는 특별한 유형의 대화 상자입니다. 경고는 사용자가 작업을 계속하기 전에 해제해야 하므로 사용자를 방해하므로 반드시 필요한 경우가 아니면 경고를 표시하지 마세요.

Apple은 다음 지침을 제안합니다.

  • 사용자에게 정보를 제공하기 위해 경고를 사용하지 마세요.
  • 실행 취소할 수 있는 일반적인 작업에 대한 경고를 표시하지 마세요. 이러한 상황에서도 데이터 손실이 발생할 수 있습니다.
  • 경고에 해당하는 경우 다른 UI 요소 또는 메서드를 사용하여 표시하지 마십시오.
  • 주의 아이콘은 아쉽게 사용해야 합니다.
  • 경고 메시지에서 경고 상황을 명확하고 간결하게 설명합니다.
  • 기본 단추 이름은 경고 메시지에서 설명하는 작업에 해당해야 합니다.

자세한 내용은 Apple OS X 휴먼 인터페이스 지침경고 섹션을 참조하세요.

경고의 해부학

위에서 설명한 것처럼 심각한 문제가 발생할 때 또는 잠재적인 데이터 손실(예: 저장되지 않은 파일 닫기)에 대한 경고로 애플리케이션 사용자에게 경고를 표시해야 합니다. Xamarin.Mac에서는 다음과 같은 C# 코드에서 경고가 생성됩니다.

var alert = new NSAlert () {
  AlertStyle = NSAlertStyle.Critical,
  InformativeText = "We need to save the document here...",
  MessageText = "Save Document",
};
alert.RunModal ();

위의 코드는 경고 아이콘, 제목, 경고 메시지 및 단일 확인 단추에 겹쳐진 애플리케이션 아이콘이 있는 경고를 표시합니다.

An alert with a OK button

Apple은 경고를 사용자 지정하는 데 사용할 수 있는 몇 가지 속성을 제공합니다.

  • AlertStyle 은 경고 유형을 다음 중 하나로 정의합니다.
    • 경고 - 사용자에게 중요하지 않은 현재 또는 임박한 이벤트를 경고하는 데 사용됩니다. 기본 스타일입니다.
    • 정보 - 현재 또는 임박한 이벤트에 대해 사용자에게 경고하는 데 사용됩니다. 현재 경고정보 사이에는 눈에 띄는 차이가 없습니다.
    • 위험 - 임박한 이벤트(예: 파일 삭제)의 심각한 결과에 대해 사용자에게 경고하는 데 사용됩니다. 이러한 유형의 경고는 아쉽게 사용해야 합니다.
  • MessageText - 경고의 주요 메시지 또는 제목이며 사용자에게 상황을 신속하게 정의해야 합니다.
  • InformativeText - 상황을 명확하게 정의하고 사용자에게 실행 가능한 옵션을 제공해야 하는 경고 본문입니다.
  • 아이콘 - 사용자 지정 아이콘을 사용자에게 표시할 수 있습니다.
  • HelpAnchor&ShowsHelp - 경고를 애플리케이션 도움말 문서에 연결하고 경고에 대한 도움말을 표시할 수 있습니다.
  • 단추 - 기본적으로 경고에는 확인 단추만 있지만 Buttons 컬렉션을 사용하면 필요에 따라 더 많은 선택 항목을 추가할 수 있습니다.
  • ShowsSuppressionButton - 사용자가 트리거한 이벤트의 후속 발생에 대해 경고를 표시하지 않는 데 사용할 수 있는 확인란을 표시하는 경우 true
  • AccessoryView - 경고에 다른 하위 보기를 연결하여 데이터 입력을 위한 텍스트 필드 추가와 같은 추가 정보를 제공할 수 있습니다. 새 AccessoryView 를 설정하거나 기존 접근자를 수정하는 경우 메서드를 호출 Layout() 하여 경고의 표시 레이아웃을 조정해야 합니다.

경고 표시

Free-Floating 또는 시트로 경고를 표시할 수 있는 두 가지 방법이 있습니다. 다음 코드는 경고를 자유 부동으로 표시합니다.

var alert = new NSAlert () {
  AlertStyle = NSAlertStyle.Informational,
  InformativeText = "This is the body of the alert where you describe the situation and any actions to correct it.",
  MessageText = "Alert Title",
};
alert.RunModal ();

이 코드를 실행하면 다음이 표시됩니다.

A simple alert

다음 코드는 시트와 동일한 경고를 표시합니다.

var alert = new NSAlert () {
  AlertStyle = NSAlertStyle.Informational,
  InformativeText = "This is the body of the alert where you describe the situation and any actions to correct it.",
  MessageText = "Alert Title",
};
alert.BeginSheet (this);

이 코드를 실행하면 다음이 표시됩니다.

An alert displayed as a sheet

경고 단추 작업

기본적으로 경고는 확인 단추만 표시합니다. 그러나 이에 국한되지 않고 Buttons 컬렉션에 추가 단추를 추가하여 추가 단추를 만들 수 있습니다. 다음 코드는 확인, 취소어쩌면 단추를 사용하여 자유 부동 경고를 만듭니다.

var alert = new NSAlert () {
  AlertStyle = NSAlertStyle.Informational,
  InformativeText = "This is the body of the alert where you describe the situation and any actions to correct it.",
  MessageText = "Alert Title",
};
alert.AddButton ("Ok");
alert.AddButton ("Cancel");
alert.AddButton ("Maybe");
var result = alert.RunModal ();

추가된 첫 번째 단추는 사용자가 Enter 키를 누르면 활성화되는 기본 단추 입니다. 반환된 값은 사용자가 누른 단추를 나타내는 정수입니다. 이 경우 다음 값이 반환됩니다.

  • 확인 - 1000.
  • 취소 - 1001.
  • 어쩌면 - 1002.

코드를 실행하면 다음이 표시됩니다.

An alert with three button options

시트와 동일한 경고에 대한 코드는 다음과 같습니다.

var alert = new NSAlert () {
  AlertStyle = NSAlertStyle.Informational,
  InformativeText = "This is the body of the alert where you describe the situation and any actions to correct it.",
  MessageText = "Alert Title",
};
alert.AddButton ("Ok");
alert.AddButton ("Cancel");
alert.AddButton ("Maybe");
alert.BeginSheetForResponse (this, (result) => {
  Console.WriteLine ("Alert Result: {0}", result);
});

이 코드를 실행하면 다음이 표시됩니다.

A three button alert displayed as a sheet

중요

경고에 3개 이상의 단추를 추가해서는 안 됩니다.

표시 안 함 단추 표시

경고의 ShowSuppressButton 속성인 경우 경고는 true사용자가 경고를 트리거한 이벤트의 후속 발생에 대해 경고를 표시하지 않는 데 사용할 수 있는 확인란을 표시합니다. 다음 코드는 표시 안 함 단추가 있는 자유 부동 경고를 표시합니다.

var alert = new NSAlert () {
  AlertStyle = NSAlertStyle.Informational,
  InformativeText = "This is the body of the alert where you describe the situation and any actions to correct it.",
  MessageText = "Alert Title",
};
alert.AddButton ("Ok");
alert.AddButton ("Cancel");
alert.AddButton ("Maybe");
alert.ShowsSuppressionButton = true;
var result = alert.RunModal ();
Console.WriteLine ("Alert Result: {0}, Suppress: {1}", result, alert.SuppressionButton.State == NSCellStateValue.On);

alert.SuppressionButton.StateNSCellStateValue.On이 이면 사용자가 표시 안 함 확인란을 선택했으므로 그렇지 않은 것입니다.

코드가 실행되면 다음이 표시됩니다.

An alert with a suppress button

시트와 동일한 경고에 대한 코드는 다음과 같습니다.

var alert = new NSAlert () {
  AlertStyle = NSAlertStyle.Informational,
  InformativeText = "This is the body of the alert where you describe the situation and any actions to correct it.",
  MessageText = "Alert Title",
};
alert.AddButton ("Ok");
alert.AddButton ("Cancel");
alert.AddButton ("Maybe");
alert.ShowsSuppressionButton = true;
alert.BeginSheetForResponse (this, (result) => {
  Console.WriteLine ("Alert Result: {0}, Suppress: {1}", result, alert.SuppressionButton.State == NSCellStateValue.On);
});

이 코드를 실행하면 다음이 표시됩니다.

An alert with a suppress button display as a sheet

사용자 지정 SubView 추가

경고에는 AccessoryView 경고를 추가로 사용자 지정하고 사용자 입력을 위한 텍스트 필드 와 같은 항목을 추가하는 데 사용할 수 있는 속성이 있습니다. 다음 코드는 텍스트 입력 필드가 추가된 자유 부동 경고를 만듭니다.

var input = new NSTextField (new CGRect (0, 0, 300, 20));

var alert = new NSAlert () {
AlertStyle = NSAlertStyle.Informational,
InformativeText = "This is the body of the alert where you describe the situation and any actions to correct it.",
  MessageText = "Alert Title",
};
alert.AddButton ("Ok");
alert.AddButton ("Cancel");
alert.AddButton ("Maybe");
alert.ShowsSuppressionButton = true;
alert.AccessoryView = input;
alert.Layout ();
var result = alert.RunModal ();
Console.WriteLine ("Alert Result: {0}, Suppress: {1}", result, alert.SuppressionButton.State == NSCellStateValue.On);

여기서 핵심 줄은 var input = new NSTextField (new CGRect (0, 0, 300, 20)); 경고를 추가할 새 텍스트 필드를 만드는 것입니다. alert.AccessoryView = input; 텍스트 필드를 경고에 연결하고 메서드에 Layout() 대한 호출을 연결합니다. 이 메서드는 새 하위 보기에 맞게 경고 크기를 조정하는 데 필요합니다.

코드를 실행하면 다음이 표시됩니다.

If we run the code, the following will be displayed

시트와 동일한 경고는 다음과 같습니다.

var input = new NSTextField (new CGRect (0, 0, 300, 20));

var alert = new NSAlert () {
  AlertStyle = NSAlertStyle.Informational,
  InformativeText = "This is the body of the alert where you describe the situation and any actions to correct it.",
  MessageText = "Alert Title",
};
alert.AddButton ("Ok");
alert.AddButton ("Cancel");
alert.AddButton ("Maybe");
alert.ShowsSuppressionButton = true;
alert.AccessoryView = input;
alert.Layout ();
alert.BeginSheetForResponse (this, (result) => {
  Console.WriteLine ("Alert Result: {0}, Suppress: {1}", result, alert.SuppressionButton.State == NSCellStateValue.On);
});

이 코드를 실행하면 다음이 표시됩니다.

An alert with a custom view

요약

이 문서에서는 Xamarin.Mac 애플리케이션에서 경고 작업을 자세히 살펴보았습니다. 경고의 다양한 유형 및 사용, 경고를 만들고 사용자 지정하는 방법 및 C# 코드에서 경고를 사용하는 방법을 알아보았습니다.