| Версия для печати темы
Нажмите сюда для просмотра этой темы в оригинальном формате |
| Форум программистов > iOS > Аналог Navigation-based Application в xcode 4 |
| Автор: fris 15.2.2012, 01:27 |
| Приветствую. Возникла необходимость попробовать написать прожку для iphone. Уровень знаний в данной области нулевой. Mac mini, xcode 4.2.1. Нужно для начала на эмуляторе сварганить rss читалку. В инете в примерах по подобной задаче написано что нужно создать проект Navigation-based Application. Но почему то при выборе шаблонов Navigation-based Application нету. Вопрос : какой другой взять шаблон наиболее приближенный к указаному? Или же где можно настроить эти шаблоны, чтоб появился нужный? Заранее спасибо. |
| Автор: Bitter 15.2.2012, 11:56 | ||||
Вы можете создать проект на основе шаблона SingleViewApplication. После создания заготовки, в классе AppDelegate в методе application:didFinishLaunchingWithOptions: Вы увидите следующий код:
Как можно заметить тут создается вью контроллер в строке self.viewController = [[[ViewController alloc] initWithNibName:@"ViewController" bundle:nil] autorelease]; А потом этот контроллер помещается в окно self.window.rootViewController = self.viewController; Немного изменив это Вы добьетесь нужного результата. Нужно всего лишь создать UINavigationController и положить в него тот вью контроллер. А уже навигэйшн положить в окно.
|
| Автор: fris 15.2.2012, 17:31 |
| Создал шаблон SingleViewApplication. Там был метод тока с одной строчкой: - (BOOL)application:(UIApplication *)application didFinishLaunchingWithOptions:(NSDictionary *)launchOptions { return YES; } Заменил return YES; указанным кодом. Выдало кучу ошибок... не понимало директиву autorelease, release. выдавало 'release' is unavaible: notavailable in automatic reference counting mod. ARC forbids explicit message send of 'release' Ругалось на self.viewController . Ошибка: property 'viewConroller' not found on object of type 'AppDelegate*' В общем просто так не получается. |
| Автор: fris 15.2.2012, 18:37 |
| Это исправил. Я там при выборе проекта выбрал use storyboard. теперь я все галки там поснимал. Бум рыть дальше... |
| Автор: Bitter 16.2.2012, 00:53 |
| Вы выбрали Use automatic reference counter. По этому оно и ругалось на релизы. Одна строчка там была действительно потому что был выбран стрибоард. Это такая штука которая во многом упрощает жизнь. Кстати с помощью нее тоже можно сделать Navigation Based без написания какого либо кода вообще: 1. Создаем Single View Based Application с выбранным сторибоардом: ![]() 2. Открываем созданный сторибоард в проекте ![]() 3. Видим наш основной контроллер. Перетаскиваем на поле NavigationController ![]() ![]() 4. Он перетянется вместе со своим ViewController, который мы благополучно удаляем. Он нам не нужен потому что у нас есть свой. Затем правой кнопкой нажимаете на Навигэйшн контроллере и тянете на свой кнтроллер. Отпускаете и выбираете в меню RelationShip - rootViewController ![]() 5. Вы увидите длинную стрелку, переместите контроллер на правую строну для удобства ![]() 6. и назначьте NavigationController Is Inital View Controller ![]() 7. Последнее - задайте заголовок вашему контролеру (для этого надо кликнуть по NavigationBar у контроллера) и запускайте. ![]() Вы сделали то что нужно и не написали ни строчки |
| Автор: fris 16.2.2012, 16:17 |
| в этом примере http://lookapp.ru/2009/05/15/iphone-sdk-tutorials4/ после создания навигейшен бейсед начинают править RootViewController.h в котором RootViewController наследуются от UITableViewController. в моем случае это ViewController.h , где ViewController наследуется от UIViewController. мне теперь нужно на форму поместить тэйбл вью контролер? и его связывать с навигейшен контролером? и нужно ViewController наследовать от UITableViewController и брать код что в том примере? |
| Автор: fris 16.2.2012, 16:38 |
| У меня нету тех методов которые правятся в файлике RootViewController.m Это какие то произвольные методы или они обязательны в реализации , где взять те котрые мне нужны, т.е. у меня сгенерился ViewController.m для ViewController.h. А мне нужно его переделать под UITableViewController? Нужно ли что-то менять в файликах appdelegate.h и appdelegate.m в связи с этим? |
| Автор: Bitter 16.2.2012, 16:58 |
| Вам нужно читать книги и задавать разные вопросы в разных темах, а не выливать поток своего непонимания в одной теме. Если вы базовых вещей не понимаете, сначала разберитесь с тем с чем имеете дело, а потом пишите программу. Если вы не понимаете как работает таблица и контроллеры то не надейтесь что напишете хоть что-то. |
| Автор: fris 16.2.2012, 17:28 |
| Да, так и надо. сори, что морочу голову. Просто пока плаваю Но вроде думал правильно , нужно тэйбл контролер подключать в проект нашел различия в шаблонах между xcode 4.2.1 и 4.1, похоже мне нужно брать проект master detail application там навигейшен контролер уже связан с тэйбл контролером. |
| Автор: Bitter 16.2.2012, 20:24 |
| Нет, не морочьтесь с шаблонами, все можно сделать с простого шаблона Simple View. Опишите что Вам конкретно нужно. Поставить TableView в ваш вью контроллер это пара пустяков, далее связать TableView с контроллером (delegate и dataSource) и пользоваться |
| Автор: fris 23.2.2012, 00:26 |
| Есть такой вопрос. Взял проект master detail application. Он мне создал два окна , на одном табличка, другое - детально - на форме только label. В табличку я загружаю rss. хочу когда кликнул на ячейку и перейдя на детально вывести в label.text значение кликнотого title из rss. Как я понял вызов controllerdetail происходит в методе: - (void)tableView:(UITableView *)tableView didSelectRowAtIndexPath:(NSIndexPath *)indexPath { <код сгенерированный шаблоном> } В этом методе я создал NSDictionary* item, куда помещяю title и link текущей ячейки rss ридера. Как мне передать в controllerdetail этот самый item? В controllerdetail в нужном методе я присвою label.text = title + "[" + link + "]" |
| Автор: Bitter 23.2.2012, 12:12 | ||||||
Один из вариантов объявить property у вашего controllerDetail, например так
а потом в методе didSelect... присвоить этому проперти ваш item
Чтобы выполнить что нибудь в этот момент, переопределите setter как нибудь так:
|
| Автор: fris 23.2.2012, 12:25 |
| Да, спасибо. Я уже додумался до "Один из вариантов объявить property у вашего controllerDetail, например так". Вчера вечером делал, но с ошибками. В общем прием и механика реализации как в finforms dotnet. В разработке используется MVC. Пока еще не четко усвоил ее. Нодо поискать где совсем разжевано было с примером. И попрактиковаться. Читаю книги, пробую чето делать... |
| Автор: fris 4.4.2012, 20:04 |
| Добрый день. Вопрос такой. Что отвечает за прокрутку UI элемента, т.е. когда пальцев проводишь вниз по экрану и контрол прокручивается. Я поместил на view обычный label и сделал его размеры больше размеров видимого экрана. и получается что вижу тока часть текста котрый вывожу в этот элемент, и пальцем не прокручивается. |
| Автор: fris 20.4.2012, 17:42 |
| Использовать те элементы котрые поддерживают Scroll. WebView, ScrollView... |