Обновите текст метки в UIViewController на основе выбранной ячейки в UICollectionView Xamarin.iOS - PullRequest
0 голосов
/ 13 сентября 2018

Этот вопрос относится к Xamarin.iOS. У меня есть UICollectionView и метка внутри UIViewController. Я настроил источник для UICollectionView. В нем я переопределяю методы ItemSelected и ItemDeselected, чтобы выделить выделенные элементы. Я также получаю индекс выбранной ячейки в UICollectionView. Но я не знаю, как передать этот индекс родительскому UIViewController, чтобы я мог обновить метку на основе выбранной ячейки в UICollectionView.

public override void ItemSelected(UICollectionView collectionView, NSIndexPath indexPath)
    {
        var cell = (newCustomCollectionViewCell)collectionView.CellForItem(indexPath);
        //cell.mainLabel.Alpha = 0.5f;
        cell.ImageView.Alpha = 0.9f;
        cell.ImageView.Layer.BorderWidth = 3.0f;
        cell.ImageView.Layer.BorderColor = UIColor.Red.CGColor;
        //base.ItemSelected(collectionView, indexPath);
        _selectedItems.Add(indexPath);
        ViewController.selectedIndex = indexPath.ToString();
        ViewController.cusLabel.Text = indexPath.ToString();

        //Console.WriteLine("Index of the highlighted cell is {0}", indexPath);
    }
    public override void ItemDeselected(UICollectionView collectionView, NSIndexPath indexPath)
    {

        var cell = (newCustomCollectionViewCell)collectionView.CellForItem(indexPath);
        //cell.mainLabel.Alpha = 0.5f;
        cell.ImageView.Alpha = 1f;
        cell.ImageView.Layer.BorderWidth = 3.0f;
        cell.ImageView.Layer.BorderColor = UIColor.White.CGColor;
        //base.ItemDeselected(collectionView, indexPath);
        _selectedItems.Remove(indexPath);
    }

Приведенный выше код находится в newCustomCollectionSource.cs

Я хочу получить доступ к индексу ячейки в родительском контроллере представления UIViewController

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

        cusLabel.Frame = new CGRect(50, 50, 100, 30);
        cusLabel.BackgroundColor = UIColor.Gray;
        CustomColllectionView.RegisterClassForCell(typeof(newCustomCollectionViewCell), newCustomCollectionViewCell.CellID);
        CustomColllectionView.Source = new newCustomCollectionSource(imageLocations);
       }

1 Ответ

0 голосов
/ 14 сентября 2018

Сначала вы можете объявить переменную-член в вашем ViewController

public NSIndexPath selectedIndex ;

Затем есть два способа передать этот индекс в родительский UIViewController.

Во-первых, вы можетереализовать метод UICollectionViewDataSource и UICollectionViewDelegate в ViewController.И установить значение элемента при выборе элемента. Ссылка на следующий код:

public partial class ViewController : UIViewController,IUICollectionViewDataSource,IUICollectionViewDelegate

.,,

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

      cusLabel.Frame = new CGRect(50, 50, 100, 30);
      cusLabel.BackgroundColor = UIColor.Gray;
      CustomColllectionView.RegisterClassForCell(typeof(newCustomCollectionViewCell), newCustomCollectionViewCell.CellID);
      CustomColllectionView.WeakDataSource= this;
 }

public override void ItemSelected(UICollectionView collectionView, NSIndexPath indexPath)
 {
       …
       this. myIndexPath= NSIndexPath.FromRowSection(indexPath.Row, indexPath. Section);  
 }

Если вы хотите реализовать метод UICollectionViewDataSource и UICollectionViewDelegate в одном классе.Передайте ваш ViewController в качестве параметра при инициализации источника.

В вашем newCustomCollectionSource.cs

private xxxViewController(your ViewController’s name) viewController;

public newCustomCollectionSource( xxxViewController viewController,…(other parameters)  )
 {
  . . . 
  this. viewController= viewController;
  . . .
 }

И установите значение элемента при выборе элемента, как указано выше:

public override void ItemSelected(UICollectionView collectionView, NSIndexPath indexPath)
 {
       …
       this.viewController.myIndexPath= NSIndexPath.FromRowSection(indexPath.Row, indexPath. Section);

 }

В вашем ViewController:

CustomColllectionView.Source = new newCustomCollectionSource (this, imageLocations);

Вы можете получить индексвыделенная ячейка, такая же как myIndexPath.Row, myIndexPath. Section в вашем ViewController.

...