В видео WWDC 2013 Apple предлагает отображать средство выбора на месте в табличном представлении в iOS 7. Как вставить и анимировать представление между ячейками табличного представления?
Вот так из приложения календаря Apple:
В видео WWDC 2013 Apple предлагает отображать средство выбора на месте в табличном представлении в iOS 7. Как вставить и анимировать представление между ячейками табличного представления?
Вот так из приложения календаря Apple:
Ответы:
Для iOS7 Apple выпустила образец кода
DateCell
.Вы можете скачать пример кода здесь: DateCell .
источник
Вы можете использовать ответ, который я ранее дал ниже, или использовать этот новый класс в Swift, который я сделал, чтобы сделать эту задачу намного проще и чище: https://github.com/AaronBratcher/TableViewHelper
Я считаю код, предоставленный Apple, проблематичным по нескольким причинам:
Для таблиц статических ячеек я определяю ячейку выбора даты под ячейкой отображения даты и имею флаг, определяющий, редактирую ли я ее. Если да, я возвращаю соответствующую высоту ячейки, в противном случае я возвращаю нулевую высоту ячейки.
Когда щелкают строку, показывающую дату, я меняю флаг и выполняю анимацию обновления, чтобы показать средство выбора.
Если у меня есть несколько средств выбора даты / времени в одной таблице, я устанавливаю соответствующие флаги при щелчке и перезагружаю соответствующие строки. Я обнаружил, что могу сохранить свою статическую таблицу, использовать намного меньше кода и мне легче понять, что происходит.
источник
Используя раскадровку и статическую таблицу, я смог добиться того же результата, используя следующий код. Это отличное решение, потому что если у вас много ячеек странной формы или вы хотите, чтобы несколько ячеек динамически отображались / скрывались, этот код все равно будет работать.
источник
[tableView reloadData];
Вызов не требуется. В настоящее время он отключает выделение строки, но лучше отменить выделение строки следующим образом:[self.tableView deselectRowAtIndexPath:[self.tableView indexPathForSelectedRow] animated:YES];
Я взял исходный код DateCell от Apple и удалил файл раскадровки.
Если вам нужен вариант без раскадровки, взгляните на: https://github.com/ajaygautam/DateCellWithoutStoryboard
источник
UIDatePicker
наUIPickerView
. Я пробовал несколько вещей и смог показатьpickerView
в каждой ячейке, но он не обновляется с каждой ячейкой. Я отправил свой вопрос и коды здесь . Пожалуйста, посмотрите, и было бы очень любезно, если бы вы могли предложить мне решение.UIDatePicker
с ,UIPickerView
но с несколькими ошибками. 1. Вылетает при открытииUIPickerView
и прокрутке таблицы. 2. Он автоматически присваивает значение «UILabel
Подробности» в нижних строках таблицы, когда значения присваиваются метке «Подробности» в верхних строках. Вот мой кодОдним из лучших руководств по этому поводу является встроенный в iOS 7 UIDatePicker - Часть 2. . В основном здесь я использую ячейки статического представления таблицы и реализую некоторые дополнительные методы. Для этого я использовал Xamarin и C #:
Вы должны активировать
Clip Subviews
.Установка высоты:
Чем переменная класса:
private bool datePickerIsShowing = false;
Показать выбор даты:
Скрыть выбор даты:
И вызывая эти функции:
источник
Я сделал свой собственный настраиваемый контроллер представления, чтобы упростить процесс добавления встроенного средства выбора, встроенного в представление таблицы. Вы просто подклассифицируете его и следуете некоторым простым правилам, и он обрабатывает представление выбора даты.
Вы можете найти его здесь вместе с примером проекта, демонстрирующим, как его использовать: https://github.com/ale84/ALEInlineDatePickerViewController
источник
Я нашел ответ на ошибку в примере apple datecell, где у вас должна быть строка под последней datecell, иначе вы получите ошибку. В методе CellForRowAtIndexPath замените строку ItemData на
После замены примера кода я теперь могу отображать отображение ячейки datePicker без ячейки под ней.
Я только что присоединился к stackoverflow, поэтому, если он находится не в том месте или где-то еще, прошу прощения.
источник
Ответ от Аарона Братчера работал, за исключением случаев, когда он использовался с несколькими разделами. Анимация была немного прерывистой и не очень хорошо скользила по следующим разделам. Чтобы исправить это, я перебрал следующий набор разделов и перевел строки на ту же величину, что и высота средства выбора даты.
Я отредактировал didSelectRowAtIndexPath так:
источник
Добавляя к предыдущим ответам,
Я пробовал решения @datinc и @Aaron Bratcher, оба работали отлично, но анимация не была такой чистой в сгруппированном статическом tableView.
Немного поиграв с ним, я добрался до этого кода, который отлично работает для меня -
Основное изменение заключается в использовании -
чтобы обновить строку, таким образом остальные разделы и ячейки таблицы не будут анимированы.
Надеюсь, это кому-то поможет.
Шани
источник
Добавление к предыдущим ответам и решению @Aaron Bratcher ...
Начиная с iOS 9, я получал прерывистую анимацию, а загрузка таблицы требовала времени, и этого было достаточно, чтобы раздражать. Я сузил его до того, что средства выбора даты медленно загружаются из раскадровки. Добавление сборщиков программным способом, а не в раскадровке, улучшило производительность загрузки, и, как побочный продукт, анимация стала более плавной.
Удалите средство выбора даты из раскадровки и получите пустую ячейку, для которой вы установите высоту, как в предыдущих ответах, а затем вызовите инициализацию для viewDidLoad:
Затем выполните действие, например
Это загружает таблицу намного быстрее, чем раньше. Вы также удаляете линию анимации,
didSelectRowAtIndexPath
поскольку она плавно анимируется без нее (ymmv).источник
Использование этого ответа без анимации корректно работает в iOS 8.1. Я преобразовал его в Swift ниже:
источник
Вот еще один способ решить проблему без статических постоянных чисел. Все ячейки можно использовать в статических и динамических табличных представлениях. В этом методе для выбора заголовка и даты используется одна ячейка!
Между прочим, у вас может быть столько инструментов для выбора даты в вашем столе, сколько захотите!
Создайте подкласс UITableViewCell :
Создайте класс CPDatePickerTableViewCell из нашего CPTableViewCell
В вашем контроллере представления реализованы эти два метода делегата
Пример настройки ограничений в построителе интерфейсов
Кроме того, я написал собственные классы ячеек для UITextField и UITextView, где tableView: didSelectRowAtIndexPath: вызывается при ячейки!
CPTextFieldTableViewCell
CBTextViewTableViewCell
Высота ячейки является динамической, и строка будет расти, когда текст переносится на новую строку!
источник
Самый простой способ использовать DateCell в версии Swift: используйте этот пример .
Перетащите класс DateCellTableViewController.swift в свой проект.
Откройте «Main.storyboard», скопируйте объект ViewController « DateCell » и вставьте его в свою раскадровку.
источник