c# - Xamarin 表单嵌套选项卡
问题描述
我注意到可以创建带有嵌套选项卡的移动应用程序。
这在 Xamarin Forms 中可行吗?请看下面的屏幕截图:
我可以使用TabbedPage在 iOS 上创建底部选项卡,但是如何在页面顶部创建嵌套选项卡?
谢谢
解决方案
这在 Xamarin Forms 中可行吗?
是的,当然。你可以使用CustomRenderer来实现它。参考下面的代码。
在 iOS 项目中。创建页面渲染器
using System;
using Xamarin.Forms;
using Xamarin.Forms.Platform.iOS;
using app1;
using app1.iOS;
using UIKit;
using Foundation;
using CoreGraphics;
using ObjCRuntime;
[assembly:ExportRenderer(typeof(MyPage1),typeof(MyPageRenderer))]
namespace app1.iOS
{
public class MyPageRenderer:PageRenderer
{
public MyPageRenderer()
{
}
protected override void OnElementChanged(VisualElementChangedEventArgs e)
{
base.OnElementChanged(e);
if (ViewController != null)
{
NSArray items = NSArray.FromStrings(new string[] { "Courses", "Favourite", "Recent" });
UISegmentedControl segmentedControl = new UISegmentedControl(items)
{
Frame = new CGRect(50, 20, NativeView.Bounds.Width - 100, 35)
};
segmentedControl.SelectedSegment = 0;
segmentedControl.TintColor = UIColor.Red;
segmentedControl.ApportionsSegmentWidthsByContent = true; //Change the width of the segment based on the content of the segment
segmentedControl.AddTarget(this, new Selector("ValueChanged:"), UIControlEvent.ValueChanged);
NativeView.AddSubview(segmentedControl);
}
}
[Export("ValueChanged:")]
void ValueChanged(UISegmentedControl sender)
{
MessagingCenter.Send<Object, int>(this, "ClickSegmentedControl", (int)sender.SelectedSegment);
// switch((int)sender.SelectedSegment){
// case 0:
// break;
// case 1:
// break;
// case 2:
// break;
// default:
// break;
//}
}
}
}
在表单中,您可以订阅消息。如果您想在单击分段时处理表单中的事件。
public MyPage1()
{
//...
MessagingCenter.Subscribe<Object, int>(this, "ClickSegmentedControl", (sender, arg) =>
{
Console.WriteLine(arg); //arg is num of the segment that you clicked.
});
}
推荐阅读
- python - 为什么即使我已将 python 命令添加到我的路径中,它也不起作用?
- php - 在 prestashop 中禁用商店页面
- javascript - 具有真实比例的 chart.js 时间散点图
- javascript - 我应该如何在 Promise 中初始化 WS 并在它之外使用它?
- ios - 如何在 Objective-C 中不旋转的视图控制器中检测设备的真实方向?
- symfony - Symfony memcached 适配器需要使用 cache.app 的 AbstractAdapter
- amazon-web-services - EC2 实例无权下载文件
- python - ThreadPoolExecutor 如何将 32 个 CPU 核心用于 CPU 绑定任务
- python - 这个错误是什么意思?如何在 Python 中处理此错误?键错误:'*'
- fortran - 何时从 lapack 切换到 scalack?