Я пишу простое приложение для iPhone, которое позволяет пользователю получить доступ к серии калькуляторов. Он состоит из следующего:
UITableViewController
(RootViewController
), со списком калькуляторов.
UIViewController
+ UIScrollView
(UniversalScroller
), который представляет пустое представление прокрутки - и имеет свойство displayViewController.
UIViewController
(Calculators 1-9
), каждый из которых содержит представление с элементами управления, представляющее определенный калькулятор. Каждый калькулятор принимает 3-5 значений через UITextField
s и UISliders
, и имеет кнопку «Рассчитать». Они могут быть выше 460 пикселей (высота экрана iPhone).
Идея такова:
Пользователь нажимает на определенный пункт меню в RootViewController
. Это загружает и вводит UniversalScroller
, ТАКЖЕ загружает и вводит UIViewcontroller
для конкретного калькулятора, который был выбран, устанавливает свойство displayedViewController
UniversalScroller
для недавно загруженного калькулятора UIViewcontroller
и толкает UniversalScroller
в спереди.
- Когда
UniversalScroller
попадает в событие 'viewDidLoad
', он устанавливает contentSize
в размер кадра просмотра своего объекта displayedViewController
. Затем он добавляет к себе displayedViewController's
как subview
и устанавливает свой собственный заголовок равным заголовку displayedViewController
. Теперь калькулятор вместе с правильным названием отображается в прокручиваемой форме.
Концептуально (и в настоящее время; все это уже реализовано), это прекрасно работает - я могу спроектировать калькуляторы так, как я считаю нужным, настолько высокими, насколько они в конечном итоге окажутся, и они будут автоматически размещаться и отображаться соответствующим образом настроено UIScrollView
. Однако есть одна проблема:
Основная причина, по которой я хотел отобразить вещи в UIScrollView
, заключалась в том, чтобы при появлении экранной клавиатуры я мог сдвинуть изображение вверх, чтобы сосредоточиться на редактируемом в данный момент элементе управления. Для этого мне нужен доступ к объекту UniversalScroller
, который содержит текущее представление калькулятора. На событии beganEditing
: каждого элемента управления я намеревался использовать метод [UniversalScroller.view scrollRectToVisible: animated:]
, чтобы переместить фокус на правильный элемент управления. Однако у меня возникли проблемы с доступом к UniversalScroller
. Я пытался присвоить ссылку на него как свойство каждого калькулятора UIViewController
, но, похоже, мне не повезло. Я читал об использовании делегатов, но мне было трудно понять, как именно они работают.
Я ищу одну из трех вещей:
- Некоторое объяснение того, как я могу получить доступ к методам
UIScrollView
из UIViewController
, вид которого содержится в нем.
или
- Подтверждение моих подозрений о том, что заставлять пользователей прокручивать форму ввода данных - это плохо, и мне следует просто полностью отказаться от просмотра прокрутки и переместить вид вверх и вниз в соответствующую позицию, когда появляется клавиатура, а затем назад, когда она исчезает.
или
- Некоторые указатели о том, как я могу изменить дизайн калькуляторов (которые в основном представляют собой простые формы ввода данных с использованием меток, ползунков и текстовых полей), которые должны содержаться в
UITableViewCells
(предположительно в UITableView
, который, как я понимаю, является прокруткой в глубине души) - я прочитал пост на SO, в котором говорится, что это более приятный способ сделать форму ввода данных, но я не смог найти никаких примеров этого в Интернете. Скриншоты были бы хорошими. Что угодно, чтобы сделать мое приложение более удобным и естественным «iPhone-like», так как перетасовывание ярлыков и текстовых полей заставляет меня чувствовать, что я создаю приложение winforms!
Я только недавно начал с этой платформы и языка, и, несмотря на то, что я в основном скептик Apple, я определенно вижу всю прелесть в том, как он работает. Помогите мне решить эту проблему, и я могу полностью влюбиться.
Dan