Как обновить / перерисовать только дополнительные представления в uicollectionview? - PullRequest
0 голосов
/ 10 марта 2019

Возможно ли обновить или перерисовать только дополнительные представления в UICollectionView?У меня есть сценарий, в котором я буду обновлять каждый раздел с помощью вставки / удаления строк, на основе которого мне нужно обновить заголовок раздела или так называемые дополнительные представления (в нем есть элемент пользовательского интерфейса, видимость которого зависит от количества элементов).в этом разделе).Так есть ли способ обновить дополнительные представления UICollectionView без необходимости обновлять что-либо еще?

Кроме того, если конкретный раздел не содержит каких-либо данных, мне нужно сделать размер дополнительного представления пустым?

Дополнительный вид:

using System;
using System.Collections.Generic;
using Foundation;
using IpcCommon;
using IpcCommon.Enumerations;
using IpcCommon.Model;
using ObjCRuntime;
using UIKit;

namespace ipc_offline_app.iOS.Portal.CustomCells.Dashboard.Redesign
{
    public partial class DashboardHeader : UICollectionReusableView
    {
        public static readonly NSString Key = new NSString("DashboardHeader");
        public static readonly UINib Nib;

        private DashCategories _dashboardCategory;
        private bool _hideViewAll;
        private IShelfItemClickListener _listener;
        private string _title;

        static DashboardHeader()
        {
            Nib = UINib.FromName("DashboardHeader", NSBundle.MainBundle);
        }

        protected DashboardHeader(IntPtr handle) : base(handle)
        {
            // Note: this .ctor should not contain any initialization logic.
        }

        public static DashboardHeader CreateCell()
        {
            var array = NSBundle.MainBundle.LoadNib("DashboardHeader", null, null);
            var cell = Runtime.GetNSObject<DashboardHeader>(array.ValueAt(0));
            return cell;
        }

        public void PopulateCell(string title, IShelfItemClickListener listener, bool hideViewAll, DashCategories category = DashCategories.NONE)
        {
            _title = title;
            _dashboardCategory = category;
            _listener = listener;
            ViewAllButton.Hidden = hideViewAll;
            _hideViewAll = hideViewAll;
            TitleButton.SetTitle(_title, UIControlState.Normal);
            UpdateViewAllVisibility();
        }

        [Export("awakeFromNib")]
        public new void AwakeFromNib()
        {
            ViewAllButton.Layer.CornerRadius = 5;
            ViewAllButton.Layer.BorderWidth = 1;
            ViewAllButton.Layer.BorderColor = Utils.ColorFromHex(Colors.SILVER).CGColor;
        }

        partial void OpenSection(NSObject sender)
        {
            if (_listener != null && _dashboardCategory != DashCategories.NONE)
                _listener.OnShelfItemClicked(_dashboardCategory, IpcCommon.Constants.VIEW_TYPE_GALLERY);
        }

        public void UpdateViewAllVisibility(Dictionary<DashCategories, List<Assignment>> filteredAssignments = null)
        {
            if (filteredAssignments != null && filteredAssignments[_dashboardCategory].Count > IpcCommon.Constants.MAX_SECTION_ITEMS)
                _hideViewAll = false;
            ViewAllButton.Hidden = _hideViewAll;
            NSLayoutConstraint trailingConstraint;
            if (_hideViewAll)
                trailingConstraint = NSLayoutConstraint.Create(TitleButton, NSLayoutAttribute.Trailing, NSLayoutRelation.Equal, ViewAllButton, NSLayoutAttribute.Trailing, 1, 0);
            else
                trailingConstraint = NSLayoutConstraint.Create(TitleButton, NSLayoutAttribute.Trailing, NSLayoutRelation.Equal, ViewAllButton, NSLayoutAttribute.Leading, 1, -10);
            AddConstraint(trailingConstraint);
            LayoutIfNeeded();
            LayoutSubviews();
        }
    }
}

1 Ответ

0 голосов
/ 11 марта 2019

Решение:

Вы можете получить ссылку на каждый видимый дополнительный вид того раздела, в который вы вставляете / удаляете данные.

Я не вижу ваш код, вы должны знать indexPath из section, который вы вставляете / удаляете данные.

Например:

   // indexP here is an example
   NSIndexPath indexP = NSIndexPath.FromRowSection(0,0);         
   Header supplementaryView = CollectionView.GetSupplementaryView(myelementkind, indexP) as Header;

   //perform your own action here    
   supplementaryView.checkvisibility();
...