1 В избранное 0 Ответвления 0

OSCHINA-MIRROR/chenhaigang-CHGAdapter

Присоединиться к Gitlife
Откройте для себя и примите участие в публичных проектах с открытым исходным кодом с участием более 10 миллионов разработчиков. Приватные репозитории также полностью бесплатны :)
Присоединиться бесплатно
Клонировать/Скачать
Внести вклад в разработку кода
Синхронизировать код
Отмена
Подсказка: Поскольку Git не поддерживает пустые директории, создание директории приведёт к созданию пустого файла .keep.
Loading...
README.md

CHGAdapter

Основное решение: UITableView в каждом контроллере необходимо устанавливать dataSource и delegate. Также UITableViewCell отделяется от DataSource tableView.

Конкретные проявления:

  • Адаптер полностью отделен от UITableView и UITableViewCell.
  • В контроллере нужно только установить адаптер и предоставить ему данные, которые должны отображаться. Адаптер передаст эти данные каждой ячейке.
  • События нажатия кнопок в UITableViewCell, события ввода текста в UITextField, события переключения UISwitch и т. д. передаются через унифицированный CHGTableViewDidSelectRowBlock.
  • Контроллер содержит меньше кода, связанного с UITableViewDelegate и UITableViewDatasource, что делает его код более понятным.
  • Благодаря этим особенностям адаптер, ячейки и HeaderFooterView можно максимально повторно использовать.

Android (CHGAdapter)

iOS (CHGAdapter)

HarmonyOS (UltimateProvider)

Если у вас есть вопросы или вы хотите пообщаться, пожалуйста, присоединяйтесь к QQ группе: 494648687.

Установка с помощью CocoaPods

pod 'CHGAdapter', '~> 1.1.5'

  • Импортируйте заголовочный файл #import "CHGAdapter.h".

Пример (UITableView)

Ниже приведен пример кода на Swift, но он не отличается от версии OC.

  1. Отображение ячеек
import UIKit

/// 展示TableView中只有cell的用法
class Base1ViewController: UIViewController {

    @IBOutlet weak var tableView: UITableView!

    override func viewDidLoad() {
        super.viewDidLoad()
        title = "歌曲"
        tableView.cellDatas = [getSongs()!]
    }

    func getSongs() -> [Any]? {
        var songs = [Any]()
        for item in ["七里香", "青花瓷", "简单爱", "双截棍", "夜曲", "以父之名", "稻香", "可爱女人", "红尘客栈", "床边故事", "跨时代"] {
            songs.append(SongsModel(name: item))
        }
        return songs
    }
}
  1. Отображение header и footer
import UIKit

/// 展示TableView中存在headerFooterView和cell的用法
class Base2ViewController: UIViewController {

    @IBOutlet weak var tableView: UITableView!

    override func viewDidLoad() {
        super.viewDidLoad()
        title = "展示TableView中存在headerFooterView和cell的用法"
        tableView.headerDatas = getHeaderModels()
        tableView.cellDatas = [getSongs1(), getSongs2()]
        tableView.footerDatas = getFooterModels()
    }

    ///专辑1数据
    func getSongs1() -> [Any] {
        var songs = [Any]()
        for item in ["半兽人", "半岛铁盒", "暗号", "龙拳", "火车叨位去", "分裂(离开)", "爷爷泡的茶", "回到过去", "米兰的小铁匠", "最后的战役"] {
            songs.append(SongsModel(name: item))
        }
        return songs
    }

    ///专辑2数据
    func getSongs2() -> [Any] {
        var songs = [Any]()
        for item in ["爱在西元前", "爸我回来了", "简单爱", "忍者", "开不了口", "上海一九四三", "对不起", "威廉古堡", "双截棍", "安静"] {
            songs.append(SongsModel(name: item))
        }
        return songs
    }

    ///headerView数据
    func getHeaderModels() -> [Any]? {
        return [Album.init(name: "八度空间", createTime: "2002年7月18日"), Album.init(name: "范特西", createTime: "2001年9月20日")]
    }

    ///footerView数据
    func getFooterModels() -> [Any]? {
        return [AlbumDesc.init(desc: "《八度空间》这张专辑的创作灵感来自周杰伦平时看的一些电影和音乐录影带。"), AlbumDesc.init(desc: "《范特西》的专辑名称来源是英文“Fantasy”的发音,意为范特西范特西(3张)“幻想” 。")]
    }
}
  1. Обработка событий при нажатии на ячейку
import UIKit

class Base3ViewController: UIViewController {

    @IBOutlet weak var tableView: UITableView!

    override func viewDidLoad() {
        super.viewDidLoad()
        title = "基础3(cell点击处理)"
        tableView.cellDatas = [getSongs()]

        tableView.setTableViewDidSelectRowBlock { (tableView, indexPath, itemData) in
            guard let model: SongsModel = itemData as? SongsModel else { return }
            print("当前点击:\(model.name!)")
        }
    }

    func getSongs() -> [Any] {
        var songs = [Any]()
        for item in ["七里香", "青花瓷", "简单爱", "双截棍", "夜曲", "以父之名", "稻香", "可爱女人", "红尘客栈", "床边故事", "跨时代"] {
            songs.append(SongsModel(name: item))
        }
        return songs
    }
}
  1. Передача событий из ячеек и headerFooterView в контроллер
import UIKit

class Base4ViewController:
``` **Пример использования UICollectionView и его полная аналогия с UICollectionView**

1. Отображение ячеек:

import UIKit

class Base1ViewController: UIViewController {

@IBOutlet weak var collectionView: UICollectionView!

override func viewDidLoad() {
    super.viewDidLoad()
    title = "Песни"
    collectionView.cellDatas = [getSongs()!]
}

func getSongs() -> [Any]? {
    var songs = [Any]()
    for item in ["七里香", "青花瓷", "简单爱", "双截棍", "夜曲", "以父之名", "稻香", "可爱女人", "红尘客栈", "床边故事", "跨时代"] {
        songs.append(SongsModel(name: item))
    }
    return songs
}

}


2. Отображение header и footer:

import UIKIt

/// Пример использования collectionView, где присутствуют headerFooterView и cell class Base2ViewController: UIViewController {

@IBOutlet weak var collectionView: UICollectionView!

override func viewDidLoad() {
    super.viewDidLoad()
    title = "Пример использования collectionView с headerFooterView и ячейками"
    collectionView.headerDatas = getHeaderModels()
    collectionView.cellDatas = [getSongs1(), getSongs2()]
    collectionView.footerDatas = getFooterModels()
}

/// Данные альбома 1
func getSongs1() -> [Any] {
    var songs = [Any]()
    for item in ["Полузверь", "Полуостровный железный ящик", "Шифр", "Кулак дракона", "Поезд уходит", "Разделение (уйти)", "Чай, который заварил дедушка", "Возвращение в прошлое", "Маленький кузнец из Милана", "Последняя битва"] {
        songs.append(SongsModel(name: item))
    }
    return songs
}

/// Данные альбома 2
func getSongs2() -> [Any] {
    var songs = [Any]()
    for item in ["Любовь до нашей эры", "Папа, я вернулся", "Простая любовь", "Ниндзя", "Не могу говорить", "Шанхай 1943", "Прости", "Замок Уильяма", "Двойной удар", "Тишина"] {
        songs.append(SongsModel(name: item))
    }
    return songs
}

// Другие функции...

}


///headerView данные
    func getHeaderModels() -> [Any]? {
        return [Album.init(name: "Восемь градусов пространства", createTime: "2002-07-18"),
                Album.init(name: "Фантекс", createTime: "2001-09-20")]
    }
    
    ///footerView данные
    func getFooterModels() -> [Any]? {
        return [AlbumDesc.init(desc: "Вдохновение для создания альбома «Восемь градусов пространства» пришло из некоторых фильмов и музыкальных записей, которые смотрел Цзеюнь в свободное время."),
                AlbumDesc.init(desc: "Название альбома «Фантекс» происходит от английского произношения слова «Fantasy», что означает «Фантазия».")]
    }

**Перевод:**

// Данные headerView
func getHeaderModels() -> [Any]? {
    return [Album.init(name: «Восемь градусов пространства», createTime: «2002–07–18»),
            Album.init(name: «Фантекс», createTime: «2001–09–20»)]
}

//Данные footerView
func getFooterModels() -> [Any]? {
    return [AlbumDesc.init(desc: «Вдохновение для создания альбома „Восемь градусов пространства“ пришло из некоторых фильмов и музыкальных записей, которые смотрел Цзеюнь в свободное время.»),
            AlbumDesc.init(desc: «Название альбома „Фантекс“ происходит от английского произношения слова „Fantasy“, что означает „Фантазия“».)]
}

Комментарии ( 0 )

Вы можете оставить комментарий после Вход в систему

Введение

Основная проблема — необходимость настройки dataSource и delegate для UITableView в каждом контроллере, а также развязка UITableViewCell и DataSource tableView. Развернуть Свернуть
MIT
Отмена

Обновления

Пока нет обновлений

Участники

все

Недавние действия

Загрузить больше
Больше нет результатов для загрузки
1
https://api.gitlife.ru/oschina-mirror/chenhaigang-CHGAdapter.git
git@api.gitlife.ru:oschina-mirror/chenhaigang-CHGAdapter.git
oschina-mirror
chenhaigang-CHGAdapter
chenhaigang-CHGAdapter
master