MonoTouch でモバイル アプリを作成しています。私の ViewControllers の 1 つは、ユーザーがマップ ビューでカスタマイズできるいくつかの項目を設定できるようにする設定ページです。これらの 1 つがピンの色です。12 色のピンがあり、UIPickerView を使用して選択肢を提示することにしました。クライアントは、ユーザーが目的の色を見つけたら [完了] ボタンをタップする必要があることを望んでいます。このために、UIToolBar を作成し、キャンセル ボタンと完了ボタンを配置しました。ツールバーは、UIPickerView のすぐ上に表示されます。PickerView と Toolbar を UIActionSheet に配置し、ユーザーが PinColor テキスト フィールドをタップすると ActionSheet を表示します。
この時点まで、これはすべて機能します。ユーザーがピンの色のテキスト フィールドをクリックすると、アクション シートが表示され、ピッカー ビューとツールバーが表示されます。問題は、ボタンまたはピッカー ビューのいずれかを操作できないことです。アクションシートの前にViewControllerがあるようなのですが、それをやっているところがどこにも見えません。誰かが次のコードを見て、何かを見つけたら教えてもらえますか? これはビューコントローラーのコードの一部にすぎないため、何か不足している可能性があります。ただし、私のコードは完全であり、正常にコンパイルされます。
public override void ViewDidLoad ()
{
base.ViewDidLoad ();
tmpRect = new RectangleF(0,-220,this.View.Bounds.Width,220);
myActionSheet = new UIActionSheet(tmpRect);
myActionSheet.Style = UIActionSheetStyle.Default;
myActionSheet.DestructiveButtonIndex = 0;
myActionSheet.DismissWithClickedButtonIndex(0,true);
settingsScrollView.AddSubview(myActionSheet);
tmpRect = new RectangleF(0,-220,this.View.Bounds.Width,40);
myToolbar = new UIToolbar(tmpRect);
myToolbar.BarStyle = UIBarStyle.Black;
myToolbar.Translucent = true;
myToolbar.UserInteractionEnabled = true;
myToolbar.SizeToFit();
UIBarButtonItem btnLeft = new UIBarButtonItem(UIBarButtonSystemItem.Cancel, PickerButtonCancelHandler);
UIBarButtonItem btnFlexibleSpace = new UIBarButtonItem(UIBarButtonSystemItem.FlexibleSpace, null);
UIBarButtonItem btnDone = new UIBarButtonItem(UIBarButtonSystemItem.Done, PickerButtonDoneHandler);
UIBarButtonItem[] items = new UIBarButtonItem[] { btnLeft, btnFlexibleSpace, btnDone };
myToolbar.SetItems(items, true);
myActionSheet.AddSubview(myToolbar);
tmpRect = new RectangleF(0,-176, this.View.Bounds.Width,200);
pvPinColor = new UIPickerView(tmpRect);
MyPicker _pinPicker = new MyPicker();
_pinPicker.Items.Add("Azure");
_pinPicker.Items.Add("Black");
_pinPicker.Items.Add("Blue");
_pinPicker.Items.Add("Chartreuse");
_pinPicker.Items.Add("Green");
_pinPicker.Items.Add("Grey");
_pinPicker.Items.Add("Orange");
_pinPicker.Items.Add("Pink");
_pinPicker.Items.Add("Red");
_pinPicker.Items.Add("Violet");
_pinPicker.Items.Add("White");
_pinPicker.Items.Add("Yellow");
pvPinColor.Source = _pinPicker;
pvPinColor.UserInteractionEnabled = true;
pvPinColor.ShowSelectionIndicator = true;
myActionSheet.AddSubview(pvPinColor);
settingsScrollView.AddSubview(txtPinColor);
txtPinColor.EditingDidBegin += delegate {
txtPinColor.ResignFirstResponder();
txtPinColor.InputView = pvPinColor;
myActionSheet.ShowInView(settingsScrollView);
myActionSheet.UserInteractionEnabled = true;
myActionSheet.BecomeFirstResponder();
settingsScrollView.BringSubviewToFront(myActionSheet);
_pinPicker.ValueChanged += (sender, e) => {
if (File.Exists (pinFilePath)) { File.Delete(pinFilePath); }
File.WriteAllText(pinFilePath, _pinPicker.SelectedItem);
txtPinColor.Text = _pinPicker.SelectedItem;
//pvPinColor.Hidden = true;
};
};
}
public class MyPicker : UIPickerViewModel
{
public event EventHandler<EventArgs> ValueChanged;
public List<string> Items
{
get { return this._items;}
set { this._items = value;}
}
List<string> _items = new List<string>();
public string SelectedItem
{
get { return this._items[this._selectedIndex]; }
}
protected int _selectedIndex = 0;
public MyPicker()
{
}
public override int GetRowsInComponent (UIPickerView picker, int component)
{
return this._items.Count;
}
public override string GetTitle (UIPickerView picker, int row, int component)
{
return this._items[row];
}
public override int GetComponentCount (UIPickerView picker)
{
return 1;
}
public override void Selected (UIPickerView picker, int row, int component)
{
this._selectedIndex = row;
if (this.ValueChanged != null)
{
this.ValueChanged (this, new EventArgs());
}
}
}