internal CoolModel(CoolPickerRenderer renderer) { this.renderer = renderer; picker = renderer.Element as CoolPicker; currentColor = picker.PickerTextColor == Color.Default ? Color.Black : picker.PickerTextColor; //iOS can not use Color.Default for UIPickerView item title. If use it we will get transparent text. }
void GetSet(out CoolPicker picker, out UITextField entry, out UIView view) { picker = Element as CoolPicker; entry = Control as UITextField; view = entry.Superview; }
void ReplaceEntry(CoolPicker newPicker) { var originalEntry = Control as UITextField; var customEntry = new ExtendedField { Space = 0 }; customEntry.EditingDidBegin += OnStarted; customEntry.EditingChanged += OnEditing; customEntry.EditingDidEnd += OnEnded; customEntry.InputAccessoryView = originalEntry.InputAccessoryView; var toolBar = (UIToolbar)customEntry.InputAccessoryView; if (newPicker.PickerBarColor != Color.Default) { toolBar.BackgroundColor = newPicker.PickerBarColor.ToUIColor(); } var toolBarItems = toolBar.Items; toolBarItems[1] = new UIBarButtonItem(UIBarButtonSystemItem.Done, (o, a) => { var picker = (UIPickerView)Control.InputView; if (selectedIndex == -1 && Element.Items != null && Element.Items.Count > 0) { UpdatePickerSelectedIndex(0); } else if (selectedIndex >= 0 && Element.Items.Count > 0) { UpdateTextColor(); Control.Text = Element.Items[selectedIndex]; } else if (selectedIndex >= 0) { selectedIndex = -1; } ElementController.SetValueFromRenderer(Picker.SelectedIndexProperty, selectedIndex); customEntry.ResignFirstResponder(); } ); if (newPicker.PickerBarTextColor != Color.Default) { toolBarItems[1].TintColor = newPicker.PickerBarTextColor.ToUIColor(); } toolBar.SetItems(toolBarItems, false); var pickerView = new UIPickerView(); customEntry.InputView = pickerView; var model = new CoolModel(this); pickerView.Model = model; pickerView.WeakDelegate = model; if (newPicker.PickerColor != Color.Default) { pickerView.BackgroundColor = newPicker.PickerColor.ToUIColor(); } originalEntry.RemoveFromSuperview(); originalEntry.Dispose(); SetNativeControl(customEntry); }