Xamarin.iOS のドキュメント
ヘッダーのカスタマイズ
コントロール > Calendar > 機能 > ヘッダーのカスタマイズ

C1Calendar コントロールは、デフォルトのヘッダーとして現在の月または年とナビゲーションボタンを表示します。また、showHeader プロパティを No に設定してデフォルトのヘッダーを非表示(削除)し、カスタムヘッダーを適用できます。

次の図は、カスタムヘッダーを含む C1Calendar を示します。

次のコード例は、C# で C1Calendar コントロールにカスタムヘッダーを適用する方法を示します。この例では、「クイックスタート」で作成したサンプルを使用します。

  1. ViewController.cs ファイルの内容を次のコードに置き換えます。
    C#
    コードのコピー
    using C1.iOS.Calendar;
    using CoreGraphics;
    using Foundation;
    using System;
    using UIKit;
    
    namespace CalendariOS
    {
        public partial class ViewController : UIViewController
        {
            C1Calendar Calendar = new C1Calendar();
            public ViewController(IntPtr handle) : base(handle)
            {
            }
            public override void ViewDidLoad()
            {
                base.ViewDidLoad();
    
                var model = new ViewModePickerViewModel(async row =>
                {
                    switch (row)
                    {
                        case 0:
                            await Calendar.ChangeViewModeAsync(CalendarViewMode.Month);
                            break;
                        case 1:
                            await Calendar.ChangeViewModeAsync(CalendarViewMode.Year);
                            break;
                        case 2:
                            await Calendar.ChangeViewModeAsync(CalendarViewMode.Decade);
                            break;
                    }
                });
                ViewModePicker.Model = model;
                Calendar.ViewModeChanged += OnViewModeChanged;
                Calendar.DisplayDateChanged += OnDisplayDateChanged;
                UpdateHeaderLabel();
            }
    
            async partial void TodayButton_TouchUpInside(UIButton sender)
            {
                await Calendar.ChangeViewModeAsync(CalendarViewMode.Month, DateTime.Today);
                Calendar.SelectedDate = DateTime.Today;
            }
    
            private void OnViewModeChanged(object sender, EventArgs e)
            {
                switch (Calendar.ViewMode)
                {
                    case CalendarViewMode.Month:
                        ViewModePicker.Select(0, 0, true);
                        break;
                    case CalendarViewMode.Year:
                        ViewModePicker.Select(1, 0, true);
                        break;
                    case CalendarViewMode.Decade:
                        ViewModePicker.Select(2, 0, true);
                        break;
                }
            }
    
            private void OnDisplayDateChanged(object sender, EventArgs e)
            {
                UpdateHeaderLabel();
            }
    
            private void UpdateHeaderLabel()
            {
                HeaderLabel.Text = Calendar.DisplayDate.ToString("Y");
            }
    
            public class ViewModePickerViewModel : UIPickerViewModel
            {
                Action<nint> _selected;
                public ViewModePickerViewModel(Action<nint> selected)
                {
                    _selected = selected;
                }
    
                public override nint GetComponentCount(UIPickerView picker)
                {
                    return 1;
                }
    
                public override nint GetRowsInComponent(UIPickerView picker, nint component)
                {
                    return 3;
                }
    
                public override string GetTitle(UIPickerView picker, nint row, nint component)
                {
                    switch (row)
                    {
                        default:
                        case 0:
                            return NSBundle.MainBundle.LocalizedString("月ビュー", "");
                        case 1:
                            return NSBundle.MainBundle.LocalizedString("年ビュー", "");
                        case 2:
                            return NSBundle.MainBundle.LocalizedString("10年ビュー", "");
                    }
                }
    
                public override void Selected(UIPickerView pickerView, nint row, nint component)
                {
                    _selected(row);
                }
            }
        }
    }