Intereting Posts
Проверка разрешения местоположения и авторизация Добавление слова «и» до конечного элемента массива в Swift как перезагрузить конкретный subview в UIView swift? Я планирую таймер читать RSSI с помощью функции readRSSI, но таймер останавливается, когда мое приложение переходит в фоновый режим Как заставить UIImageView заполнить UITableViewCell? Отображение подсознательного изображения на iPad Не удалось поделиться ссылкой, он показывает ошибку: плагин com.linkedin.LinkedIn.ShareExtension прерван в IOS Swift: не удалось найти перегрузку для преобразования, которая принимает предоставленный аргумент Как проверить, существует ли такой же точный файл Как установить размер изображения для улучшения вывода OCR.? как сделать uitableview нельзя вытащить при прокрутке вверху Почему высота окна 480 при высоте рамки приложения 460? Каков счетчик ссылок объекта в следующей программе? Lazy Загрузка в UIScrollView с данными из SQLite iOS «Невозможно декодировать» m3u8

Установка делегата пользовательского класса в контроллер View View

Я создал собственный класс, который является подклассом UICollectionReusableView . По сути, это заголовок раздела Collection View, и я добавляю несколько кнопок на нем. Когда кнопка нажата, я хочу, чтобы контроллер просмотра фильтровал результаты (в зависимости от того, какая кнопка нажата).

Мне нужен мой контроллер просмотра, чтобы иметь выход к этому настраиваемому классу, но это не сработало, потому что Xcode жалуется на повторный контент, имеющий классы (хотя я собираюсь использовать только один заголовок секции CollectionView). Поэтому мой следующий вариант – это делегирование.

Мой вопрос двоякий:

  1. Как настроить делегат своего класса на контроллер представления? Обычно я устанавливаю делегат в prepareForSegue но поскольку у меня нет этого, я не уверен, что делать. Мой контроллер просмотра создан в раскадровке, и мой пользовательский класс не имеет к нему ссылки. Даже в моем контроллере просмотра я не могу получить доступ к заголовку раздела коллекционного представления, чтобы настроить его делегат на себя (я проверил документацию Apple и нет свойства для доступа к заголовку раздела).

  2. Когда я устанавливаю IBAction s в свой пользовательский класс, как я могу гарантировать, что кнопка, которая была прослушена, также передается в качестве отправителя? Я связал одну из кнопок с действием и написал func someAction (sender: AnyObject) {} но как программа знает, что сама кнопка должна быть передана в качестве отправителя?

Вот мой код:

 // Custom Class class CollectionHeaderView: UICollectionReusableView { @IBAction func buttonPressed (sender: AnyObject) { **delegate?.didTapButton(self)** } var delegate: UICollectionViewDelegate? } // Protocol protocol CollectionHeaderViewDelegate { func didTapButton(sender: CollectionHeaderView) } // View Controller (the delegate) func collectionView(collectionView: UICollectionView, viewForSupplementaryElementOfKind kind: String, atIndexPath indexPath: NSIndexPath) -> UICollectionReusableView { let headerView = collectionView.dequeueReusableSupplementaryViewOfKind(kind, withReuseIdentifier: "CollectionHeaderView", forIndexPath: indexPath) as! CollectionHeaderView headerView.delegate = self return headerView } extension BrowseViewController: CollectionHeaderViewDelegate { func didTapButton(sender: CollectionHeaderView) { print("Delegate's Button Tapped") } } 

Выделенная область – это где Xcode дает мне сообщение об ошибке: «Значение типа UICollectionViewDelegate не имеет члена« Did Tap Button »- не знаю, почему это относится к UICollectionViewDelegate. Я попытался изменить имя переменной и вызов нажать делегат в headerViewDelegate, но он все же дал ошибку.

Если этот UICollectionReusableView является заголовком раздела в виде коллекции, вы можете создать его в коде. Вам нужно было бы реализовать collectionView:viewForSupplementaryElementOfKind:atIndexPath: В этот момент вы (контроллер вида) создаете заголовок раздела и можете настроить его любым способом.

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

введите описание изображения здесь

но как программа знает, что сама кнопка должна быть передана в качестве отправителя

Когда кнопка постучана и активируется ее действие управляющего события, сама кнопка всегда предоставляется в качестве параметра. Это часть контроля.