Xamarin ios - 如何从静态 TableView 访问单元格

Posted

技术标签:

【中文标题】Xamarin ios - 如何从静态 TableView 访问单元格【英文标题】:Xamarin ios - How to access a cell from a static TableView 【发布时间】:2016-02-08 19:33:28 【问题描述】:

我的表格视图在 iPad 设备上的呈现方式存在问题。尽管在故事板上将背景颜色设置为清除,但在 iPad 上测试时,tableview 始终具有灰色背景颜色。我搜索了这个网站并找到了很多解决方案:

已经尝试过这个建议

public override void viewDidLoad() 
 base.ViewDidLoad();

tableView.backgroundView = new UIView();
tableView.backgroundView.backgroundColor = UIColor.Clear;

我什至尝试在我的 tableview 类中覆盖 GetCell 函数,这样我就可以通过访问单元格来更改 contentView 颜色,就像这样

cell.contentView.backgroundColor

但从未调用 GetCell 函数。

编辑

这是来自具有静态表格视图的屏幕之一的示例屏幕

有人能指出我正确的方向吗?

【问题讨论】:

能否给个灰色背景色的截图? @iamIcarus 我添加了其中一个屏幕的屏幕截图以及它在 iPad 上的显示方式。谢谢。 因为它的填充单元格调用了 GetCell。看起来单元格/表格视图背景是白色而不是灰色? 这些单元格是通过情节提要添加的。这是一个静态表。而且我没有在任何地方覆盖 GetCell 函数,因为我通过情节提要手动添加了单元格和文本字段。我现在想覆盖 GetCell 函数并以编程方式将背景颜色设置为清除,因为情节提要的更改不会在这里反映出来。而且,是的,我猜它是白色的。我试图在我的 UITableViewController 类中覆盖 GetCell,但它永远不会被调用。您对我如何使用静态表格视图执行此操作有任何指示吗? 【参考方案1】:

如果您想通过覆盖 GetCell 来更改背景颜色,您希望在情节提要中为您的自定义单元格提供一个标识符,并在您的 TableViews TableSource 中覆盖 GetCell,如下所示。此外,您可能还想检查您的 tableView 源是否设置为 ViewDidLoad 中的 CustomTableSource:

tableView.Source = new CustomTableSource(this);

除非您使用的是 IUITableViewDataSource,否则请检查您的 Weak 委托和源是否已设置:

tableView.WeakDelegate = this;
tableView.WeakDataSource = this;

覆盖 GetCell:

public override UITableViewCell GetCell(UITableView tableView, NSIndexPath indexPath)

     var cell = tableView.DequeueReusableCell("CellIdentifier") as CustomCell;
     if (cell == null)
            cell = new CustomCell();
     cell.BackgroundColor = UIColor.Clear
     return cell;

您还必须覆盖 RowsInSection:

public nint RowsInSection(UITableView tableView, nint section)

      return 7;

【讨论】:

嗨@尼克。谢谢您的答复。我希望我不需要为静态表实现 UITableViewSource 但我还是尝试了。挑战是,我不得不实现 RowsInSection 函数,因为它是一个静态表,所以这里没有任何意义。另一个挑战是我在 GetCell 函数中遇到另一个异常,说它无法从数据源获取单元格。 是的,如果您正在实现自定义 TableSource,您还必须覆盖 RowsInSection,这很好,只需让它返回一个代表您拥有的行数的数字【参考方案2】:

在尝试解决这个白色背景问题两天后,我找到了最简单的解决方案:

要解决这个问题,只需将这一行添加到您的 AppDelegate.cs 文件中的 FinishedLaunching 函数中。这定义了您的应用中所有表格单元格的外观(如果您确实希望所有表格视图单元格都具有清晰的背景。)

    UITableViewCell.Appearance.BackgroundColor = UIColor.Clear;

现在可以在 iPhone 和 iPad 上正确呈现。

【讨论】:

该解决方案的问题是所有 TableViewCells 背景将在整个应用程序中清晰,您可能不希望这样。看来您在正确实施 TableView 时遇到了更多麻烦 @Nick,我在实现表格时没有问题。我的应用程序中有动态表视图和静态表视图。对于静态表格视图,我真的不需要 UITableViewSource,因为所有单元格都是在情节提要上设计的。这就是我的意思,我没有看到定义表源的必要性,因为我无法在 RowsInSection 中返回特定数量的行(行已经在情节提要上设计)。一直以来,我一直在寻找一种访问这些静态表格视图单元格的方法,以便更改背景颜色。我最终找到了一个更简单的解决方案,现在我将其发布在上面 您可以通过覆盖 RowsInSection 并返回单元格的数量来返回特定数量的行。您在情节提要中定义的单元格然后您只需提供一个标识符并像我的示例一样重用它们 我已经试过那个尼克了。我的单元格有一个标识符,我也尝试定义 CustomTableSource。但我最终在 GetCell 函数中遇到了异常。它无法从数据源返回单元格。类似的东西,我觉得很奇怪,因为它适用于动态表格视图。 我的猜测是您的代码或情节提要中一定有问题,因为它无法正常工作,但如果没有实际错误,很难说。我通常只是创建一个自定义单元格和一个表格源,无论表格是否是静态的,我都可以在多个屏幕上使用相同的单元格类。

以上是关于Xamarin ios - 如何从静态 TableView 访问单元格的主要内容,如果未能解决你的问题,请参考以下文章

在 Xamarin.iOS 中为 2 个依赖静态库创建绑定

如何从 Xamarin.iOS 中的 iOS 扩展调用 NSUserDefaults Observer

如何在 Xamarin(iOS) 中将按钮从右向左移动

如何从 Xamarin.ios 访问 UIImagePickerController 快门 UiButton

Xamarin / iOS - 如何从硬件键盘禁用选项卡键码

如何从 Xamarin 中的 iOS DropInteraction 读取 pdfdoc