gpt4 book ai didi

xamarin - 使用自定义 TableView 渲染器时如何为 TableSections 设置不同的页脚

转载 作者:行者123 更新时间:2023-12-04 12:45:30 25 4
gpt4 key购买 nike

我正在使用渲染器来允许我在 TableView 中设置自定义页脚。渲染器可以工作,但我希望能够为不同的表格部分设置不同的页脚。例如,表格第 0 部分的一个页脚和表格第 1 部分的另一个页脚,一直到表格第 5 部分。

这是我正在使用的 XAML:

           <!-- <local:ExtFooterTableView x:Name="tableView" Intent="Settings" HasUnevenRows="True">-->
<TableView x:Name="tableView" Intent="Settings" HasUnevenRows="True">
<TableSection Title="Cards1">
<ViewCell Height="50">
<Label Text="Hello1" />
</ViewCell>
<ViewCell Height="50">
<Label Text="Hello2" />
</ViewCell>
</TableSection>
<TableSection Title="Cards2">
<TextCell Height="50" Text="Hello"></TextCell>
</TableSection>

</TableSection>
<!-- </local:ExtFooterTableView>-->
</TableView>

这是 C# 类和渲染器:
public class ExtFooterTableView : TableView
{
public ExtFooterTableView()
{
}
}

和:
   using System;
using Japanese;
using UIKit;
using Xamarin.Forms;
using Xamarin.Forms.Platform.iOS;

[assembly: ExportRenderer(typeof(ExtFooterTableView), typeof(Japanese.iOS.ExtFooterTableViewRenderer))]
namespace Japanese.iOS
{
public class ExtFooterTableViewRenderer : TableViewRenderer
{
protected override void OnElementChanged(ElementChangedEventArgs<TableView> e)
{
base.OnElementChanged(e);
if (Control == null)
return;

var tableView = Control as UITableView;
var formsTableView = Element as TableView;
tableView.WeakDelegate = new CustomFooterTableViewModelRenderer(formsTableView);
}


private class CustomFooterTableViewModelRenderer : TableViewModelRenderer
{
public CustomFooterTableViewModelRenderer(TableView model) : base(model)
{
}

public override UIView GetViewForFooter(UITableView tableView, nint section)
{
Debug.WriteLine("xx");
if (section == 0)
{
return new UILabel()
{
// Text = TitleForFooter(tableView, section), // or use some other text here
Text = "abc",
TextAlignment = UITextAlignment.Left
// TextAlignment = NSTextAlignment.NSTextAlignmentJustified
};
}
else
{
return new UILabel()
{
// Text = TitleForFooter(tableView, section), // or use some other text here
Text = "def",
TextAlignment = UITextAlignment.Left
// TextAlignment = NSTextAlignment.NSTextAlignmentJustified
};
}
}

}
}
}

该代码有效,但我想了解如何为 XAML 中的不同部分设置不同的页脚文本。像这样的东西:

从我所看到的看来,代码部分存在 TitleForFooter(tableView, section)但我不确定如何使用它以及如何设置它。请注意,我并不是真的在寻找 View 模型解决方案。我很高兴能够简单地将节页脚文本指定为 TableView XAML 的一部分。

如果有人能给我一些建议,我将不胜感激。

最佳答案

首先,为了能够在 XAML 中指定节页脚文本 - 最简单的选择是在 TableSection 中创建可绑定(bind)属性。 .但是作为 TableSection是密封的,我们不能派生它来定义我们的自定义可绑定(bind)属性。

因此,下一个选项是创建附加的可绑定(bind)属性。

public class Ex
{
public static readonly BindableProperty FooterTextProperty =
BindableProperty.CreateAttached("FooterText", typeof(string), typeof(Ex), defaultValue: default(string));

public static string GetFooterText(BindableObject view)
{
return (string)view.GetValue(FooterTextProperty);
}

public static void SetFooterText(BindableObject view, string value)
{
view.SetValue(FooterTextProperty, value);
}
}

下一步是更新渲染器以检索每个部分的此值:
private class CustomFooterTableViewModelRenderer : TableViewModelRenderer
{
public CustomFooterTableViewModelRenderer(TableView model) : base(model)
{
}

public override UIView GetViewForFooter(UITableView tableView, nint section)
{
return new UILabel()
{
Text = TitleForFooter(tableView, section), // or use some other text here
Font = UIFont.SystemFontOfSize(14),
ShadowColor = Color.White.ToUIColor(),
ShadowOffset = new CoreGraphics.CGSize(0, 1),
TextColor = Color.DarkGray.ToUIColor(),
BackgroundColor = Color.Transparent.ToUIColor(),
Opaque = false,
TextAlignment = UITextAlignment.Center
};
}

//Retrieves the footer text for corresponding section through the attached property
public override string TitleForFooter(UITableView tableView, nint section)
{
var tblSection = View.Root[(int)section];
return Ex.GetFooterText(tblSection);
}
}

示例使用
<local:ExtFooterTableView x:Name="tableView" Intent="Settings" HasUnevenRows="True">
<TableSection Title="Cards1" local:Ex.FooterText="Sample description">
<ViewCell Height="50">
<Label Margin="20,0,20,0" Text="Hello1" />
</ViewCell>
<ViewCell Height="50">
<Label Margin="20,0,20,0" Text="Hello2" />
</ViewCell>
</TableSection>
<TableSection Title="Cards2" local:Ex.FooterText="Disclaimer note">
<TextCell Height="50" Text="Hello"></TextCell>
</TableSection>
</local:ExtFooterTableView>

enter image description here

关于xamarin - 使用自定义 TableView 渲染器时如何为 TableSections 设置不同的页脚,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/47268646/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com