Intereting Posts
CFBundleУдача отсутствует или недействительна Почему Firebase Analytics отключена для моего приложения iOS? Добавление нескольких страниц в scrollview с помощью построителя интерфейсов UTF-8 не работает в Safari (внутри приложения iphone) Подключить приложение iOS с Apache Server с помощью SSL-сертификата? как я мог реализовать такой эффект индикатора выполнения в iOS Обнаружение полнофункционального режима Safari Mobile Safari с использованием мультимедийных запросов Ошибки CoreGraphics при вращении в приложении iPad Работает ли APNS push-уведомления после удаления приложения из магазина приложений? Использование шага в ячейке представления таблицы, но данные, возвращаемые в VC, не обновляются правильно AVAudio проигрыватель воспроизводит список звуков с переменной паузой между IOS сохранить, назначить Получить идентификатор контента из MFMailComposeViewController Как проверить, активен ли интернет (проверка доступности сети и доступность веб-страницы) в iOS? NSSearchPathForDirectoriesInDomains NSUserDomainMask

Установка делегата пользовательского класса в контроллер 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, но он все же дал ошибку.

Solutions Collecting From Web of "Установка делегата пользовательского класса в контроллер View View"

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

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

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

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

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