0

我正在开发一个 iOS 应用程序Xamarin,其中我有两个 底部viewControllers相同UICollectionView的应用程序,其中加载了一个带有快照的列表(类似于 1 行的画廊)。选择第一个 viewController 的快照后,我转到第二个 viewController,我希望在加载viewController时预先选择快照,但我正在接收System.NullReferenceException,就在屏幕加载后一秒钟。任何想法为什么?

在第一个 viewController 中:

我将 indexPath 保存在帮助程序类中,并使用NotificationCenter.

public void ItemSelected (UIKit.UICollectionView collectionView, Foundation.NSIndexPath indexPath)
    {
        UICollectionViewCell cell = collectionView.CellForItem (indexPath);
        var newImage = (UIImageView)cell.ViewWithTag (100);
        var selectedBgView = new UIView (cell.Bounds);
        cell.SelectedBackgroundView = selectedBgView;
        cell.SelectedBackgroundView.BackgroundColor = UIColor.Orange;
        ApplicationState.Instance.TappedSnapshot = AppUtils.UIImageToBase64 (newImage.Image); 

        ApplicationState.Instance.SnapshotIndexPath = collectionView.IndexPathForCell (cell); 


        NSNotification notif = NSNotification.FromName ("imageTapped", this);
        NSNotificationCenter.DefaultCenter.PostNotification (notif);

    }

在第二个视图控制器中:

public override void ViewDidAppear (bool animated)
    {
        base.ViewDidAppear (animated);
        CollectionView.SelectItem (ApplicationState.Instance.SnapshotIndexPath, true, UICollectionViewScrollPosition.Right);
        this.ItemSelected (CollectionView, ApplicationState.Instance.SnapshotIndexPath);
    }

public void ItemSelected (UIKit.UICollectionView collectionView, Foundation.NSIndexPath indexPath)
    {
        UICollectionViewCell cell = collectionView.CellForItem (indexPath);
        var selectedBgView = new UIView (cell.Bounds);
        cell.SelectedBackgroundView = selectedBgView;
        cell.SelectedBackgroundView.BackgroundColor = UIColor.Orange;

    }

编辑:当我不在 ViewDidAppear 中使用“ItemSelected”方法时,它不会崩溃!

4

1 回答 1

0

因此,首先这是处理此问题的错误方法。但是崩溃很可能是由于空单元而发生的。如果单元格不可见,它将为空。您需要先滚动到它。

你应该做的是有一个在底部有集合视图的父视图控制器。视图的顶部将保存切换的数据。导航时,只切换顶部内容而不是创建新的集合视图。

于 2015-10-02T21:55:25.860 回答