我有Xaml表单,我可以从中呈现集合视图
XAML
<?xml version="1.0" encoding="utf-8" ?>
<ContentPage xmlns="http://xamarin.com/schemas/2014/forms"
xmlns:x="http://schemas.microsoft.com/winfx/2009/xaml"
xmlns:local="clr-namespace:CustomRenderer_POC;assembly=CustomRenderer_POC"
x:Class="CustomRenderer_POC.GalleryPage">
<Label Text="{Binding MainText}" VerticalOptions="Center" HorizontalOptions="Center" />
<local:CollectionView/>
</ContentPage>
CollectionView.CS
using Xamarin.Forms;
namespace CustomRenderer_POC
{
public class CollectionView : ContentView
{
}
}
CollectionViewRender.cs(在iOS项目中)
using Xamarin.Forms.Platform.iOS;
using Xamarin.Forms;
using UIKit;
using CustomRenderer_POC;
using CoreGraphics;
[assembly: ExportRenderer(typeof(CollectionView), typeof(CollectionViewRenderer))]
namespace CustomRenderer_POC
{
class CollectionViewRenderer : ViewRenderer<CollectionView, UICollectionView>
{
protected override void OnElementChanged(ElementChangedEventArgs<CollectionView> e)
{
var layout = new UICollectionViewFlowLayout();
base.OnElementChanged(e);
if (Control == null)
SetNativeControl(new UICollectionView(new CGRect(0, 0, 300, 256), new UICollectionViewLayout()));
if (Control != null)
{
int[] a = new int[] {10, 11, 12, 13, 14};
Control.Source = new CollectionViewSource(a);
Control.BackgroundColor = UIColor.Blue;
Control.ReloadData();
}
}
}
}
CollectionViewSource.cs
using System;
using System.Collections.Generic;
using System.Text;
using Foundation;
using UIKit;
using System.Drawing;
using System.Linq;
using CoreGraphics;
using CustomRenderer_POC;
using Xamarin.Forms;
[assembly: ExportRenderer(typeof(UICollectionViewSource), typeof(CollectionViewSource))]
namespace CustomRenderer_POC
{
class CollectionViewSource : UICollectionViewSource
{
public Array items = null;
public CollectionViewSource(Array elements)
{
items = elements;
}
public override void ItemSelected(UICollectionView collectionView, NSIndexPath indexPath)
{
}
public override UICollectionViewCell GetCell(UICollectionView collectionView, NSIndexPath indexPath)
{
UICollectionViewCell cell = (UICollectionViewCell)collectionView.DequeueReusableCell("MyCell", indexPath);
cell.BackgroundColor = UIColor.Red;
UILabel li = new UILabel(new CGRect(0, 0, 10, 20));
li.Text = "xyz";
cell.AddSubview(li);
return cell;
}
public override nint NumberOfSections(UICollectionView collectionView)
{
return 1;
}
public override nint GetItemsCount(UICollectionView collectionView, nint section)
{
return items.Length;
}
}
}
现在重点是,
我在所有方法中都添加了一个断点。
但是,方法 GetCell 和 ItemSelected 永远不会被点击。
任何人都可以帮忙......
我关注了很多博客,但没有任何帮助
我对“ xamarin ”平台
有所了解我得到的最终输出是:Output of above program in iOS simulator
答案 0 :(得分:0)
如你所说,它不会产生蓝屏。
继承自ContentView
:
public class CollectionView : ContentView
不要将ContentView
用于“空”视图,其中是渲染器中的主要逻辑。需要设置Content
属性。或者将跳过此控件的渲染。尝试从CollectionView
类继承View
。
其次,我更改了渲染器:
if (Control == null) {
SetNativeControl (new UICollectionView (new CGRect (0, 0, 300, 256), new UICollectionViewFlowLayout ()));
Control.RegisterClassForCell(typeof(UICollectionViewCell), "MyCell");
}
我将您的UICollectionViewLayout
更改为UICollectionViewFlowLayout
。
根据Apple文档,它是一个抽象的基类:
UICollectionViewLayout类是您的抽象基类 子类,用于生成集合视图的布局信息。
但Apple为我们提供了使用实施的准备 - UICollectionViewFlowLayout
希望这有帮助