如何在UICollectionView中单击自定义单元格时触发segue

时间:2014-03-27 14:29:59

标签: ios xamarin.ios xamarin

当我的UICollectionView中的自定义单元格突出显示时,我正在尝试对详细视图控制器执行segue(具有添加的属性)。由于我不能使用来自子类PerformSegue的{​​{1}},我对如何实现这一点感到困惑,而我似乎无法从UICollectionViewSource中获取所选单元格。

这是我到目前为止的简略版本:

收集来源:

UICollectionView

的UIViewController:

public class ProductCollectionDataSource : UICollectionViewSource
{       
    public ProductCollectionDataSource()
    {
        Products = new List<FeedItem>();
    }

    public List<FeedItem> Products { get; set; }

    public override void ItemUnhighlighted(UICollectionView collectionView, NSIndexPath indexPath)
    {
        var cell = (MultiColumnCell)collectionView.CellForItem(indexPath);
        cell.Alpha = 1.0f;
        // Perform segue here, passing this cell's data...?
    }
}

那么,如何根据UICollectionView中选定的单元格触发UIViewController中的segue?

3 个答案:

答案 0 :(得分:6)

您可以传入对控制器的引用,然后使用它来执行Segue:

public class ProductCollectionDataSource : UICollectionViewSource
{
        WeakReference<DashboardViewController>  _dvc;

        public List<FeedItem> Products { get; set; }

        public ProductCollectionDataSource(DashboardViewController parentVc)
        {
            Products = new List<FeedItem>();

            _dvcRef = new WeakReference<DashboardViewController>(parentVc);
        }

        public override void ItemUnhighlighted(UICollectionView collectionView, NSIndexPath indexPath)
        {
            var cell = (MultiColumnCell)collectionView.CellForItem(indexPath);

            cell.Alpha = 1.0f;

            if (_dvcRef.TryGetTarget(out DashboardViewController dashboardVc){
                dashboardVc.PerformSegue("Identifier"); 
            }
        }
    }
}

答案 1 :(得分:6)

  1. 在故事板中设置您的segue(拖放)
  2. 打开右侧面板添加一个segue标识符(基本上是一个字符串,如&#34; CustomSegue&#34;)
  3. 使用collectionView委托(didSelectItemAtIndexPath :)触发用户点击单元格
  4. call [self performSegueWithIdentifier:@&#34; CustomSegue&#34;所有者:自]
  5. 在管理UICollectionVIew的控制器中实现方法prepareForSegue
  6. 检查[segue.identifier isEqualToString:@&#34; CustomSegue&#34;]
  7. 如果是这样,那就得到segue.destinationViewController(应该是你的DetailViewController
  8. 传递您想要的任何属性(segue.destinationViewController.property = propertyIWantToPass)

答案 2 :(得分:0)

从ViewController手动搜索到Detail View Controller。 像往常一样设置 - (void)prepareForSegue方法中的Segue。

然后在您认为合适的地方手动调用它:

-(void)yourCall{
    [self performSegueWithIdentifier:@"yourSegueIdentifier" sender:self];
}