Xamarin.iOS – Jak pokazać kontrolkę daty tak jak w kalendarzu iOS

Posted by Maciej Gos on Saturday, October 22, 2016

TOC

Jest to tips & tricks działający dla Xamarin.iOS

W dzisiejszym odcinku chciałbym pokazać wam jak dodać kontrolkę daty „iOS style” (z takim fajnym rozwijaniem wierszy jak w np. w kalendarzu).

Xamarin.iOS – Jak pokazać kontrolkę daty tak jak w kalendarzu iOS

Ja w swoim przykładzie użyłem na Storyboard kontrolki TableViewController. Wywyższa kontrolka zapewnia nam funkcjonalność kontrolki TableView i ScrollView w jednym.

Następnie należy skonfigurować sekcji i wiersze, dodajemy kontrolkę DatePicker i wysokość wiersza ustawiamy na 216.

Reszta magii dzieje się w kodzie… Cały kod źródłowy można znaleźć na GitHub

Kod

[code lang=”csharp”]
using Foundation;
using System;
using UIKit;

namespace DatePickerDemo
{
public partial class MainViewController : UITableViewController
{
private NSDateFormatter formatter;
private bool showDatePicker;

public MainViewController (IntPtr handle) : base (handle)
{
formatter = new NSDateFormatter();
formatter.DateStyle = NSDateFormatterStyle.Short;
}

public override void ViewDidLoad()
{
base.ViewDidLoad();

dateLabel.Text = formatter.ToString(datePicker.Date);
datePicker.ValueChanged += DatePicker_ValueChanged;
}

public override nfloat GetHeightForRow(UITableView tableView, NSIndexPath indexPath)
{
nfloat rowHeight = tableView.RowHeight;

if(indexPath.Section == 1 && indexPath.Row == 2)
{
rowHeight = 0;
}

if (showDatePicker && (indexPath.Section == 1 && indexPath.Row ==2))
{
rowHeight = 216;
}

return rowHeight;
}

public override void RowSelected(UITableView tableView, NSIndexPath indexPath)
{
tableView.BeginUpdates();

if (indexPath.Section == 1 && indexPath.Row == 1)
{
showDatePicker = !showDatePicker;
}

tableView.DeselectRow(indexPath, true);
tableView.EndUpdates();
}

private void DatePicker_ValueChanged(object sender, EventArgs e)
{
dateLabel.Text = formatter.ToString(datePicker.Date);
}
}
}
[/code]

Maciej Gos

真诚赞赏,手留余香

使用微信扫描二维码完成支付


comments powered by Disqus