Swift c нуля: UIKit урок 25 - UITableView

Поделиться
HTML-код
  • Опубликовано: 30 ноя 2024

Комментарии • 80

  • @andrewsteellson9991
    @andrewsteellson9991 2 года назад +13

    22:00 ❗❗❗
    !textLabel is depricated now!
    for changing of content image or text - use this construction in method ....cellForRowAt:
    let cell = table.view.dequeueReusableCell(withIdentifier: identifire, for indexPath)
    var contentCell = cell.defaultContentConfiguration()
    contentCell.text "...(your text)"
    cell.contentConfiguration = contentCell
    return cell
    😉

  • @pasha7324
    @pasha7324 6 лет назад +51

    Спасибо, Евгений. Ты реально лучше всех все разжевываешь. Благодаря твоему труду многие получили работу и еще больше ребят получат в будущем. Спасибо.

  • @kostanichkataev6961
    @kostanichkataev6961 8 месяцев назад

    Моё уважение и благодарность за контент из 2024

  • @ВадимСлободянюк-н3у
    @ВадимСлободянюк-н3у 4 года назад +8

    Реализация Копировать/Вставить для iOS 13:
    1. Объявляем переменную *var myPasteBoard = UIPasteboard.general* для записи данных в буфер обмена
    2. Подписываем *ViewController* на *UITextFieldDelegate* :
    extension ViewController: UITableViewDataSource, UITableViewDelegate, *UITextFieldDelegate*
    3. Теперь вставляем в в конце *extension* следующий код:
    //MARK: - Копировать/Вставить
    // Разрешаем вызов контекстного меню
    func tableView(_ tableView: UITableView, shouldShowMenuForRowAt indexPath: IndexPath) -> Bool {
    return true
    }
    // Добавляем кнопку "Копировать" в контекстное меню
    func tableView(_ tableView: UITableView, canPerformAction action: Selector, forRowAt indexPath: IndexPath, withSender sender: Any?) -> Bool {
    return action == #selector(UIResponderStandardEditActions.copy(_:)) ? true : false
    }
    // При нажатии на кнопку "Копировать" записываем в myPasteBoard значение выбранной ячейки
    func tableView(_ tableView: UITableView, performAction action: Selector, forRowAt indexPath: IndexPath, withSender sender: Any?) {
    let cell = tableView.cellForRow(at: indexPath)
    myPasteBoard.string = cell!.textLabel?.text
    print("Значение ячейки теперь храниться в буфере обмена")
    }
    *Источник* : www.ioscreator.com/tutorials/use-context-menu-table-view-ios-tutorial

  • @АртемСыряный-ч6о
    @АртемСыряный-ч6о 3 года назад +8

    И снова спасибо за великолепный урок!:)
    Небольшое обновление. Начиная с iOS 13, методы:
    func tableView(_ tableView: UITableView, shouldShowMenuForRowAt indexPath: IndexPath) -> Bool
    func tableView(_ tableView: UITableView, canPerformAction action: Selector, forRowAt indexPath: IndexPath, withSender sender: Any?) -> Bool
    func tableView(_ tableView: UITableView, performAction action: Selector, forRowAt indexPath: IndexPath, withSender sender: Any?)
    помечены как Deprecated. Apple рекомендует использовать новый метод делегата
    func tableView(_ tableView: UITableView, contextMenuConfigurationForRowAt indexPath: IndexPath, point: CGPoint) -> UIContextMenuConfiguration?
    Теперь, чтобы реализовать функцию копирования содержимого ячейки, достаточно реализовать один новый метод, вместо трех устаревших
    @available(iOS 13.0, *)
    func tableView(_ tableView: UITableView, contextMenuConfigurationForRowAt indexPath: IndexPath, point: CGPoint) -> UIContextMenuConfiguration? {
    let actionProvider: UIContextMenuActionProvider = { _ in
    return UIMenu(title: "Edit", children: [
    UIAction(title: "Copy",
    handler: { _ in
    let cell = tableView.cellForRow(at: indexPath)
    let pasteBoard = UIPasteboard.general
    pasteBoard.string = cell?.textLabel?.text
    })
    ])
    }
    return UIContextMenuConfiguration(identifier: "unique-ID" as NSCopying,
    previewProvider: nil,
    actionProvider: actionProvider)
    }
    Более подробно об этом рассказано на WWDC (начиная с 41 минуты)
    developer.apple.com/videos/play/wwdc2019/224/?time=2505

  • @emil42661
    @emil42661 4 года назад +13

    черт, актуально до сих пор. вот сижу постигаю, действительно важные темы, которые мне помогли затащить задание на курсах и вообще видос помог разобраться. От души!!!

    • @theswiftdevelopers1301
      @theswiftdevelopers1301  4 года назад +5

      White666ColorSand , не надо никаких курсов проходи эти

    • @Kwartal1
      @Kwartal1 2 года назад

      @@theswiftdevelopers1301 эхх, новые бы видео от вас, но вы решили курсы сделать платные (
      Обещали бороться со злом как говориться…

    • @theswiftdevelopers1301
      @theswiftdevelopers1301  2 года назад +2

      @@Kwartal1 , если человек не будет кушать он не сможет уроки бесплатные записывать)

    • @Kwartal1
      @Kwartal1 2 года назад

      @@theswiftdevelopers1301 запиши пжл свежих уроков!)

    • @theswiftdevelopers1301
      @theswiftdevelopers1301  2 года назад

      @@Kwartal1 эти смотрите они актуальные

  • @yacoder-proit
    @yacoder-proit Год назад

    Классные уроки, спасибо! Один из самых лучших курсов на русском по UIKit или даже самый лучший)

  • @watafakaya
    @watafakaya 2 года назад +3

    43:20 для того, чтобы появился значок удаления нужно добавит функцию
    func tableView(_ tableView: UITableView, canEditRowAt indexPath: IndexPath) -> Bool {
    true
    }

  • @Помка-л6я
    @Помка-л6я 6 лет назад +10

    Начал смотреть уроки для новичков, рад что проект не заброшен. Спасибо что продолжаете снимать видео!

  • @Александра-ш8ж1б
    @Александра-ш8ж1б 4 года назад +3

    Спасибо за ваш труд! Прошло уже 2 года, но видео до сих пор актуально для таких новичков, как я)

  • @ВладиславДенисов-з3ы
    @ВладиславДенисов-з3ы 3 года назад +4

    Евгений спасибо большое, что объясняете базовые темы. Я вот только сейчас понял для чего Data Source и Delegate остальные просто показывают, но ничего про это не говорят. Я как обезьянка повторяю за их уроком, но не понимаю для чего я это делаю. А так сразу все на свои места встает после таких видео!

  • @ТимурСаттаров-ш6ч

    Спасибо за видео, очень подробно и доходчиво рассказано 👌

  • @sergeybizunov6387
    @sergeybizunov6387 6 лет назад +4

    Вот этого урока не хватало! Кое-что никогда не использовал. Тема не простая, есть свои подводные камни. По поводу статической таблицы и ViewController-а (2:28). Их можно использовать вместе! для этого нужно кинуть на контроллер Container View, а потом вписать в него TableViewController со статической таблицей и это очень удобно, особенно когда нужно сделать сложный интерфейс в контроллере, т.к. с TableViewController-ом работать в этом плане очень сложно.

  • @Sanche87
    @Sanche87 Год назад

    спасибо за ваш труд ! очень подробно все разжеванно

  • @vovamik
    @vovamik 6 лет назад +3

    Женя, Вы гений! Вы просто гениально растолковываете людям знания, которые другие ораторы описывают так, что фокусы Копперфильда могут показаться проще, чем взаимодействие внутри MVC. Огромное Вам человеческое спасибо за столь ВАЖНЫЙ для каждого начинающего программиста рассказ. Изучаю SWIFT 9 месяцев, пока это видео не посмотрел, так и не понимал про взаимодействие. О том, что DataSourсe передает данные понятно, а вот как обратно (ответ: Как-то передает, фиг знает как.).
    В копилку взаимопомощи (товарищ тут раньше спрашивал про тонкости с подгрузкой данных из сети). Сегодня вроде доделал тестовое приложение для потенциального работодателя, так вот там как раз и попался вариант с данными из сети. Предлагаю фрагмент кода:
    override func viewWillAppear(_ animated: Bool) {
    super.viewWillAppear(true)
    // заполняем данными
    DispatchQueue.main.asyncAfter(deadline: .now() + .seconds(1), execute: {
    self.gistContentText.text = currentContent ??
    "Sorry ...

    Line is busy now.

    Please go to GISTS LIST
    and comeback to this gist."
    })
    }
    // MARK: - TableViewDataSource
    func tableView(_ tableView: UITableView, numberOfRowsInSection section: Int) -> Int {
    DispatchQueue.main.asyncAfter(deadline: .now() + .seconds(1), execute: {
    tableView.reloadData()
    })
    return commitList!.count
    }
    Вверху была загрузка данных в UITextView с секундной задержкой (можно увеличить, может интернет слабый или данных много, надо по-дольше подождать 3-4 секунды, пробуйте). Ниже в numberOfRowsInSection вызываем обновление таблицы, т.к. изначально количество строк НОЛЬ. И она (таблица) даже узнавая о том, что данные загрузились и массив уже наполнился (у меня запрос был 4-5 раз в секунду, я просто принт там воткнул и разглядывал в консоли все эти фокусы) не хотела вызываться сама по себе. Но, чудо гугления, уроки Ивана Акулова и тяга к опасным экспериментам (по изматываю нервов себе и окружающим) победили. В итоге всё работает. Если кому пригодится - буду рад.
    Евгений! За Ваши труды снимаю шляпу и (хоть уже и давал зарок просмотреть все Ваши курсы от начала до конца) теперь точно буду все-все-все смотреть, а не частично (по наболевшим вопросам).
    Буду ждать новых уроков с нетерпением.

  • @ОлесяУкраинская-т1д

    Спасибо!😃Отличное видео!🏆Очень понравилось, что показал как работать и через код и через сториборд!!Спасибо Огромное!

  • @caspernew6697
    @caspernew6697 4 года назад

    Афигенный урок ! ) Очередная пачка полезностей ) Благодарю ! )

  • @TheIvan1501
    @TheIvan1501 6 лет назад +1

    Спасибо, что ты есть! Спасибо за твои старания!

  • @Kfilmos
    @Kfilmos 6 лет назад +1

    душевно и доступно! Удачи в делах!

  • @Shandnbro
    @Shandnbro 6 лет назад +1

    Огромное вам спасибо!
    Каждый урок жду с нетерпением!

  • @evgeny3400
    @evgeny3400 6 лет назад +6

    Женя, спасибо за труд. Лекция отличная. Я с этой темой знаком, но кое что нового тоже узнал. Понравился детальный подход к объяснению делегата и датаСорс. Для объяснения основ - сделано на отлично! Тема большая и все понятное дело не охватить. Было бы еше круто показать пример с использованием структуры - для предоставления данных таблице (т.е. когда все данные в одном массиве). И как минутку доп материала - показать примеры регистрации ячейки, так как например у меня с этим часто проблемы ) например: let cell = UITableViewCell(style: .subtitle, reuseIdentifier: "cell")

  • @just_SmK
    @just_SmK Год назад

    Контекстное меню с функцией копирования
    func tableView(_ tableView: UITableView, contextMenuConfigurationForRowAt indexPath: IndexPath, point: CGPoint) -> UIContextMenuConfiguration? {
    return UIContextMenuConfiguration(identifier: nil, previewProvider: nil) { _ -> UIMenu? in
    let copyAction = UIAction(title: "Copy", image: UIImage(systemName: "doc.on.doc")) { action in
    UIPasteboard.general.string = self.array[indexPath.row]
    }
    return UIMenu(title: "", image: nil, identifier: nil, options: [], children: [copyAction])
    }
    }

  • @sanchezcodez9359
    @sanchezcodez9359 2 года назад

    Лучший гуру, счастья тебе :) и спасибо

  • @laisermed
    @laisermed 6 лет назад +1

    Очень доступно для понимания, спасибо

  • @Murakasi
    @Murakasi 2 года назад

    Огромное вам спасибо за ваш труд!!

  • @nadzeyasivukha8297
    @nadzeyasivukha8297 6 лет назад +1

    Очень понравился урок! Спасибо!

  • @حكموأمثال-ل9ن
    @حكموأمثال-ل9ن 4 года назад +1

    спасибо подробное объяснение !)

  • @user-iOSnick-dev
    @user-iOSnick-dev 2 года назад

    Огромное спасибо за урок!

  • @rustrust1792
    @rustrust1792 5 лет назад

    Спасибо, Евгений.

  • @MegaDigri
    @MegaDigri 6 лет назад +1

    Супер спасибо за TableView!!!

  • @МаратНазмутдинов-ы5н

    Супер, спасибо за разъяснение!

  • @hryst19
    @hryst19 5 лет назад +1

    Спасибо , урок очень полезный. Классно было бы ещё показать переход на другой контролёр , при нажатии на ячейку. Типа как в тел. Книге

    • @theswiftdevelopers1301
      @theswiftdevelopers1301  5 лет назад

      Антон Микляев в 27 уроке

    • @hryst19
      @hryst19 5 лет назад

      Понял, спасибо ещё не смотрел.

  • @crazyfox1317
    @crazyfox1317 5 лет назад

    Спасибо! Очень доступно и информативно!

  • @fedorlosev616
    @fedorlosev616 5 лет назад

    Крутая работа! Мне нравится.

  • @steplerstationery5231
    @steplerstationery5231 4 года назад +1

    Оч круто! Я в восторге! Огромное спасибо!
    Еще вопрос! Не смог по названиям найти урок по переходам (segue) между вьюшками! Подскажите где искать плиз!!!

  • @alexanderushakov4892
    @alexanderushakov4892 6 лет назад +2

    Большое спасибо!

  • @vladpodvoiskyi2307
    @vladpodvoiskyi2307 6 лет назад +1

    отличный урок!!! Спасибо!!!

  • @Johan-jg8zq
    @Johan-jg8zq 6 лет назад +1

    СУПЕР!) СПАСИБО!

  • @IhorFedii-n1i
    @IhorFedii-n1i 5 лет назад +1

    Спасибо!

  • @lolimipo3114
    @lolimipo3114 Год назад

    Спасибо огромное за данный урок очень круто!!!!!!!!! единственное бесят констрейны которые я вообще от слова не понял, буду нанимать репетитора((

  • @rimmas2020
    @rimmas2020 2 года назад

    Спасибо огромное!!!!

  • @demart
    @demart 6 лет назад +1

    Спасибо

  • @dashashevchenko2518
    @dashashevchenko2518 3 года назад

    Спасибо за Вашу работу.А Вы могли бы рассказать в одном из своих видео о GitHub?

  • @saidaxmadansoriddinov6119
    @saidaxmadansoriddinov6119 2 года назад

    Классный урок !!!

  • @iosone9759
    @iosone9759 2 года назад

    Все отлично, а есть добавление ячейки с помощью какой-нибудь кнопки?

  • @vazgensargsyan9914
    @vazgensargsyan9914 5 лет назад

    Спосибо Бальшое!!!

  • @ДобрыняЗахаров-е6к

    Очень крутой урок !)

  • @stanislavsky85
    @stanislavsky85 3 года назад

    Разжевано хорошо,но нужно чтобы это еще отложилось.Крепите кошелек к видео.Любой труд должен быть оплачен.

  • @edwardx4743
    @edwardx4743 2 года назад

    Big man have a big heart :)

  • @yuriykalandarov9661
    @yuriykalandarov9661 2 года назад

    func tableView(_ tableView: UITableView, didDeselectRowAt indexPath: IndexPath) {
    print(indexPath.row)
    }
    Всегда рандомный номер дает , то есть все таки возвращает не тот row на который нажали... Как быть здесь?

  • @ABC-tv9zy
    @ABC-tv9zy Год назад

    👍👍👍👍

  • @explo9087
    @explo9087 6 лет назад

    Подскажите, почему myTableView дважды инициализируется. Сначало как переменная myTableView = UITAbleVIew(), а а потом и в методе CcreateTable() первая строка ?

  • @exey.artwork
    @exey.artwork 4 года назад

    Copy почему-то не получилось сделать, при нажатии не выскакивала плашка на симуляторе

  • @MrSterium
    @MrSterium 4 года назад

    лучший =)

  • @vitys1000
    @vitys1000 6 лет назад +1

    Домашнего задания нет?

  • @sergeybizunov6387
    @sergeybizunov6387 6 лет назад +2

    Есть один момент с таблицами - потокобезопасность и вот тут информации очень мало. Смысл в том, что данные для таблицы обычно берутся из массива. И если во время обновления таблицы происходит асинхронное изменение этих данных, вот тут может быть краш приложения. Женя, если будет ещё один урок по таблицам, может уделить немного внимания этой теме? Я думаю многим это будет интересно, т.к. те кто досмотрел твои уроки с самого начала до этого момента не могут уже быть новичками по определению =)). Спасибо тебе за твой труд!

  • @andrusia2048
    @andrusia2048 3 года назад

    лайк

  • @User714-u7t
    @User714-u7t 6 лет назад +2

    Не понятно для чего мы вызываем вот эти методы. Без них все работает как надо. Или я не прав? закомментил их, но все равно все задуманные функции работают.
    func tableView(_ tableView: UITableView, editingStyleForRowAt indexPath: IndexPath) -> UITableViewCellEditingStyle {
    return .delete
    }
    func tableView(_ tableView: UITableView, canMoveRowAt indexPath: IndexPath) -> Bool {
    return true
    }

  • @Maxmudjon
    @Maxmudjon 6 лет назад

    У вас случайно не хакинтош ? если да у вас тоже симуляторе кроме iPhone 5S и iPhone SE ничего не запускается

    • @РадимГасанов
      @РадимГасанов 5 лет назад

      у меня хак. все запускается

    • @ZQutui
      @ZQutui 5 лет назад

      виртуалка и тоже все запускается

  • @AntonBear
    @AntonBear 2 года назад

    делигат и протокол,

  • @vladimirl7413
    @vladimirl7413 5 лет назад

    Уроки прекрасные, спасибо вам за этот огромный труд.
    На мой взгляд заставка ужасная

  • @Storage-u9c
    @Storage-u9c 5 лет назад +3

    ставим лойс если тоже ниче не поняли(

  • @martinreparuk7989
    @martinreparuk7989 4 года назад

    Огромное вам спасибо!!!)))

  • @ArchProCinema
    @ArchProCinema 4 года назад

    Супер, спасибо !!!

  • @FominValera
    @FominValera 3 года назад

    Спасибо

  • @leshaaleshaaa
    @leshaaleshaaa 4 года назад

    Спасибо !