到目前为止我尝试过的是什么。我试图以编程方式加载它。我在多平台项目中编写此代码。如附图所示。
我在这里。
var layout = new StackLayout()
{
Orientation = StackOrientation.Vertical,
Spacing = 20,
Padding = new Thickness(0, 20, 0, 0)
};
if (Device.OS == TargetPlatform.iOS)
{
var segmentControl = new UISegmentedControl();
segmentControl.Frame = new CGRect(20, 20, 280, 40);
segmentControl.InsertSegment("One", 0, false);
segmentControl.InsertSegment("Two", 1, false);
segmentControl.SelectedSegment = 1;
segmentControl.ValueChanged += async (sender, e) =>
{
var selectedSegmentId = (sender as UISegmentedControl).SelectedSegment;
await MainPage.DisplayAlert($"Native Segmented Control Clicked {selectedSegmentId}",
"Whoa!!!!!!", "OK");
};
layout.Children.Add(segmentControl);
}
可以这样做吗?或自定义渲染是唯一的解决方案?
答案 0 :(得分:3)
可以在使用Xamarin.Forms编写的iOS应用程序中使用SegmentedControl。
如果您使用shared project approach with Xamarin.Forms,那么您所询问的代码将非常合适。
在这种情况下,您需要在条件指令#if __IOS__
中包含特定于iOS的代码(#if __ANDROID__
以获取特定于Android的代码)
var layout = new StackLayout()
{
Orientation = StackOrientation.Vertical,
Spacing = 20,
Padding = new Thickness(0, 20, 0, 0)
};
#if __IOS__
if (Device.OS == TargetPlatform.iOS)
{
var segmentControl = new UISegmentedControl();
segmentControl.Frame = new CGRect(20, 20, 280, 40);
segmentControl.InsertSegment("One", 0, false);
segmentControl.InsertSegment("Two", 1, false);
segmentControl.SelectedSegment = 1;
segmentControl.ValueChanged += async (sender, e) =>
{
var selectedSegmentId = (sender as UISegmentedControl).SelectedSegment;
await MainPage.DisplayAlert($"Native Segmented Control Clicked {selectedSegmentId}",
"Whoa!!!!!!", "OK");
};
layout.Children.Add(segmentControl);
}
#endif
有一个很好的例子展示了如何将UISegmentedControl与来自James Montemagno的Xamarin.Forms一起使用Embedding Native Controls into Xamarin.Forms
然而,看起来你有基于PCL方法的解决方案。
使用Portable Class Library approach with Xamarin.Forms时,您必须创建自定义控件(选中this simple example about UISegmentedControl)或使用第三方控件,例如SegmentedControl.FormsPlugin