iPhone / Obj-C: доступ к UIScrollView из представленного в нем представления - PullRequest
0 голосов
/ 13 апреля 2010

Я пишу простое приложение для iPhone, которое позволяет пользователю получить доступ к серии калькуляторов. Он состоит из следующего:

  • UITableViewController (RootViewController), со списком калькуляторов.
  • UIViewController + UIScrollView (UniversalScroller), который представляет пустое представление прокрутки - и имеет свойство displayViewController.
  • UIViewController (Calculators 1-9), каждый из которых содержит представление с элементами управления, представляющее определенный калькулятор. Каждый калькулятор принимает 3-5 значений через UITextField s и UISliders, и имеет кнопку «Рассчитать». Они могут быть выше 460 пикселей (высота экрана iPhone).

Идея такова:

  1. Пользователь нажимает на определенный пункт меню в RootViewController. Это загружает и вводит UniversalScroller, ТАКЖЕ загружает и вводит UIViewcontroller для конкретного калькулятора, который был выбран, устанавливает свойство displayedViewController UniversalScroller для недавно загруженного калькулятора UIViewcontroller и толкает UniversalScroller в спереди.

    1. Когда UniversalScroller попадает в событие 'viewDidLoad', он устанавливает contentSize в размер кадра просмотра своего объекта displayedViewController. Затем он добавляет к себе displayedViewController's как subview и устанавливает свой собственный заголовок равным заголовку displayedViewController. Теперь калькулятор вместе с правильным названием отображается в прокручиваемой форме.

Концептуально (и в настоящее время; все это уже реализовано), это прекрасно работает - я могу спроектировать калькуляторы так, как я считаю нужным, настолько высокими, насколько они в конечном итоге окажутся, и они будут автоматически размещаться и отображаться соответствующим образом настроено UIScrollView. Однако есть одна проблема:

Основная причина, по которой я хотел отобразить вещи в UIScrollView, заключалась в том, чтобы при появлении экранной клавиатуры я мог сдвинуть изображение вверх, чтобы сосредоточиться на редактируемом в данный момент элементе управления. Для этого мне нужен доступ к объекту UniversalScroller, который содержит текущее представление калькулятора. На событии beganEditing: каждого элемента управления я намеревался использовать метод [UniversalScroller.view scrollRectToVisible: animated:], чтобы переместить фокус на правильный элемент управления. Однако у меня возникли проблемы с доступом к UniversalScroller. Я пытался присвоить ссылку на него как свойство каждого калькулятора UIViewController, но, похоже, мне не повезло. Я читал об использовании делегатов, но мне было трудно понять, как именно они работают.

Я ищу одну из трех вещей:

  1. Некоторое объяснение того, как я могу получить доступ к методам UIScrollView из UIViewController, вид которого содержится в нем.

или

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

или

  1. Некоторые указатели о том, как я могу изменить дизайн калькуляторов (которые в основном представляют собой простые формы ввода данных с использованием меток, ползунков и текстовых полей), которые должны содержаться в UITableViewCells (предположительно в UITableView, который, как я понимаю, является прокруткой в глубине души) - я прочитал пост на SO, в котором говорится, что это более приятный способ сделать форму ввода данных, но я не смог найти никаких примеров этого в Интернете. Скриншоты были бы хорошими. Что угодно, чтобы сделать мое приложение более удобным и естественным «iPhone-like», так как перетасовывание ярлыков и текстовых полей заставляет меня чувствовать, что я создаю приложение winforms!

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

Dan

1 Ответ

1 голос
/ 13 апреля 2010

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

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...