xamarin - 当用户单击不滚动时如何更改所选项目
问题描述
iOSSpecific:Picker.UpdateMode="WhenFinished"
我在搜索后发现选择器更新模式有问题添加到我的自定义选择器后找到此行“ ”未更改
protected override void OnElementChanged(ElementChangedEventArgs<Picker> e)
{
base.OnElementChanged(e);
var extendedPicker = e.NewElement as CustomPicker;
if (extendedPicker == null) return;
var toolbar = new UIToolbar(new CGRect(0.0f, 0.0f, Control.Frame.Size.Width, 44.0f));
toolbar.Items = new[]
{
new UIBarButtonItem(UIBarButtonSystemItem.FlexibleSpace),
new UIBarButtonItem("Yes",
UIBarButtonItemStyle.Done,
delegate {
Control.ResignFirstResponder();
})
};
if (this.Control != null)
{
Control.InputAccessoryView = toolbar;
}
}
解决方案
设置新UIToolbar
的forControl.InputAccessoryView
时,需要手动设置选定的for值。Control
在渲染器中尝试以下代码:
public class CustomPickerRenderer : PickerRenderer, IUIPickerViewDelegate, IUIPickerViewDataSource
{
string SelectedValue;
protected override void OnElementChanged(ElementChangedEventArgs<Picker> e)
{
base.OnElementChanged(e);
SelectedValue = Element.Items[0];
UIPickerView pickerView = (UIPickerView)Control.InputView;
pickerView.WeakDelegate = this;
pickerView.DataSource = this;
pickerView.Delegate = new deleagteClass();
var toolbar = new UIToolbar(new CGRect(0.0f, 0.0f, Control.Frame.Size.Width, 44.0f));
toolbar.Items = new[]
{
new UIBarButtonItem(UIBarButtonSystemItem.FlexibleSpace),
new UIBarButtonItem("Yes",
UIBarButtonItemStyle.Done,
delegate {
Control.ResignFirstResponder();
Control.Text = SelectedValue;
})
};
if (this.Control != null)
{
Control.InputAccessoryView = toolbar;
}
}
public nint GetComponentCount(UIPickerView pickerView)
{
return 1;
}
public nint GetRowsInComponent(UIPickerView pickerView, nint component)
{
return Element.Items.Count;
}
[Export("pickerView:viewForRow:forComponent:reusingView:")]
public UIView GetView(UIPickerView pickerView, nint row, nint component, UIView view)
{
UILabel label = new UILabel
{
TextColor = UIColor.Black,
Text = Element.Items[(int)row].ToString(),
TextAlignment = UITextAlignment.Center,
};
var picker = this.Element;
return label;
}
[Export("pickerView:didSelectRow:inComponent:")]
public void Selected(UIPickerView pickerView, nint row, nint component)
{
SelectedValue = Element.Items[(int)row];
}
}
效果:
推荐阅读
- java - 滚动视图不滚动布局权重
- javascript - 多台计算机上的 Fullcalendar 自动更新日历
- javascript - 嵌套数组的 JavaScript 递归
- reactjs - create-react-app 与 storybook 6.1.6 集成并且构建有错误
- react-native - 广告未在 iOS 中展示 | 反应原生
- time - istio 日志输出时区可以修改吗?
- python-3.x - 默认值未显示在 html 页面(Flask 表单)中?
- python - 检查列 pyspark df 的值是否存在于其他列 pyspark df
- android - 在没有 Internet 连接的情况下获取当前位置
- go - 如何在谷歌云存储中上传调整大小的图像?