2015-01-19 2 views
1

ПреамбулаОдинаковые UIProgressView Более Множественные View контроллеры

У меня есть приложение IOS с процессом регистрации две страницы.

Я установил UIProgressView на каждой странице, чтобы измерить совокупный прогресс пользователей в рамках указанного процесса регистрации.

В настоящее время процесс регистрации состоит из шести полей.

Существующий UIProgressView принимает поплавковый ввод на основе 1/6, обновляемый, когда текстовое поле заканчивает редактирование.

Первый контроллер UIProgressView запускается с поплавковым значением, равным нулю.

Как только все поля будут заполнены; второй контроллер представления запускается с поплавковым значением 0,5.

ПРОБЛЕМА

Это решение примитивное и проблемы в изобилии.

Для начала вы можете видеть как UIProgressViews во время размотки/segue.

ВОПРОС

Можно ли мне использовать один и тот же UIProgressView через два контроллера зрения?

Заранее благодарю вас за помощь.

NB

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

основной выпуск ИЗОБРАЖЕНИЯ UIProgressView Issue

Решение проблемы, показанного на изображении выше, моя главная цель.

ответ

5

Если вы хотите, чтобы индикатор оставаться неподвижным, а пользователь завершает свою 2 регистрацию VCs, а затем использовать вид контроллер сдерживание.

Создайте контроллер родительского представления, содержащий представление прогресса и вид контейнера, чтобы удерживать один из 2 регистрационных VC. Используйте привязку segue, чтобы связать этот вид контейнера с контроллером дочернего представления. Вы можете сделать контроллер дочернего контроллера навигационным контроллером, если хотите, или просто вставить первую регистрацию VC, а затем сделать анимацию между первой и второй по желанию.

Edit: Там метод, называемый transitionFromViewController:toViewController:duration:options:animations:completion:, который позволяет создавать переходы между контроллерами зрения ребенка легко.

Second Edit: Если вам необходимо установить связь между родительским контроллером представления и контроллером (ями) дочернего представления, вам необходимо подключить способ сделать это самостоятельно. Чтобы связать ребенка с родителем, обычный способ сделать это - настроить свойство делегата в дочернем элементе и определить простой протокол для связи с родителем. В методе prepareForSegue для родителя вы устанавливаете свойство делегата child для себя. Затем ребенок может отправлять сообщения родителям по мере необходимости.

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

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

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

У меня есть проект на GitHub с поистине кошмарным названием «test» (ссылка), который устанавливает родительский и вид ребенка контроллера, а также сообщения от родителя к ребенку и от ребенка к родителю.

+0

Идеальный помощник. Вид контейнера с дочерними контроллерами обеспечивал беспрецедентный опыт работы с ui и не требовал времени для реализации. Спасибо за совет. – arman

+0

Любая идея, как я управляю контроллером родительского контроля UIProgressView с контроллера детского просмотра? – arman

+0

Нет автоматического способа сделать это. Посмотрите мое второе редактирование на мой ответ, чтобы узнать, как это сделать. –

1

По моему мнению, создайте два отдельных UIProgressView для обоих контроллеров.

Все, что вам нужно сделать, это сыграть с его значением. Здесь важны данные не UI. Я имею в виду, если вы хотите показать, что половина прогресса была завершена. Этого можно добиться, создав новый контроллер UIProgressView в следующем контроллере, потому что в конечном итоге данные в элементе управления будут изменены.

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

Если вы не знаете, как передавать данные между двумя контроллерами просмотра, чем это answer поможет вам.

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

var appDelegate = UIApplication.sharedApplication().delegate as AppDelegate 
appDelegate.window?.addSubview(progressView) 
+0

Hi Kampai. Благодарю за ваш ответ. Я придерживаюсь той же точки зрения и согласен с вашими решениями. Я скорректировал вышеуказанный вопрос, чтобы включить образ моей основной проблемы, мешающий мне принимать решения. Пожалуйста, порекомендуйте. – arman

+0

, если вы хотите заполнить белый пробел при прокрутке для навигации, тогда это невозможно, потому что салфетка назад - это функция по умолчанию, введенная с iOS7, и мы не можем вводить между анимацией вида. – Kampai

+0

Хорошо. Спасибо за помощь. Я сделаю снимок при подкачке двух видов в одном контроллере. В противном случае я воспользуюсь одним из ваших предложений. – arman