2010-10-02 4 views
2

Пару недель назад я начал свое исследование в разработке приложений Iphone и после многих приветственных приложений мира в разных настройках. Теперь я готов к моему самому первому приложению, основанному на шаблоне проектирования MVC в какао.
Это открывает множество вопросов для меня, хотя и, прочитав разные ссылки на классы UIViews и контроллеров, я застрял в попытке выяснить, какой из них я должен использовать.Захватывая концепцию UIviews и UIViewcontrollers

В моем приложении я пытаюсь создать сетку из маленьких прямоугольников с каждым прямоугольником, имеющим другое текстовое значение, чтобы быть более конкретным, я пытаюсь создать простой календарь, который будет отображать все дни месяца в сетке.
Каждый прямоугольник является экземпляром класса i с именем Tile, в этом классе я хочу реализовать метод drawRect, чтобы нарисовать прямоугольник для меня и установить значение текста в день, который он должен представлять.

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

UIView, однако, также является контейнером, но один для объектов, которым нужны методы рисования, такие как drawRect. Это приведет к тому, что сетка будет содержать все плитки, если я прав.

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

ответ

2

Если были какие-два яблока документа вы должны прочитать, это одна о UIViewController s, которые могут быть найдены here и один около UIView s, которые могут быть найдены here. UIViewController, как вы упомянули, больше связан с интеграцией с iOS-системой, чем с видимым компонентом. Он имеет ссылку на UIView и что UIView является корневым узлом в видимом дереве элементов, который начинается с этого контроллера просмотра.

В программировании на iOS вам не нужно беспокоиться о рисовании прямоугольников, потому что по большей части вы будете расширять элементы, которые умеют рисовать себя, а затем просто сообщают им, куда идти. Основным видимым элементом в этом случае является UIView. Существует много разных видов UIView s (см. Рисунок в руководстве по программированию UIView), поэтому для вашего случая вы можете использовать простой UIView с фоновым изображением, установленным на графике вашего календаря, и добавить подзаголовок типа UILabel.UILabel является подклассом UIView, поэтому вы знаете, что это тоже будет что-то видимое.

После того, как вы поймете эти концепции (что может занять много времени), Interface Builder начнет иметь больше смысла, и вы можете начать с ними делать что-то из этого - и понять, как он работает. По сути, она создаст иерархию UIViewController, ссылаясь на иерархию UIView s автоматически, затем вы.

+0

Спасибо, я прочитал эти документы раньше, но они предоставили мне такую ​​нагрузку информации, я не был уверен, где искать. –

+0

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

1

Tile должен быть подклассом UIView, так как вы хотите drawRect своих «дней». Затем вы можете добавить столько плиток, сколько хотите, UIViewController.view и манипулировать ими с кодом UIViewController (файл .m).

Но вы можете добавить UILabels в свой Tile и просмотреть их, указав их свойство текста. В этом случае вам не нужно переопределять drawRect: вообще, UILabel сделает все остальное за вас, но вам придется программно добавлять эти метки к Tile (например, в метод Tile init) или в Interface Builder. В последнем случае вам придется загрузить их из XIB с помощью метода [[NSBundle mainBundle] loadNib:owner:options:].

+0

Спасибо! UILabel действительно имеет смысл. Об этой последней части у меня есть довольно базовое знание файлов nib, но я не уверен, о чем вы говорите здесь. Вы создаете UILabel в построителе интерфейса из файла nib-файла viewcontrollers, а затем реализуете его в каждой плитке, это то, что вы имеете в виду? Прямо сейчас я стараюсь, чтобы это было очень просто и не было слишком много с IB, поскольку похоже, что он будет добавлять много вещей под капотом. но я обязательно буду помнить об этом. Спасибо. –

Смежные вопросы