NavigationController с поиском, картой и таблицей: как - PullRequest
0 голосов
/ 25 марта 2011

Поскольку я новичок в разработке для iPhone, мне нужно несколько советов о том, как структурировать мой xib-файл, чтобы получить следующее (по сути, оно должно быть очень похоже на приложение Google Places ).

Мне нужен NavigationController с:

  • Карта с функцией поиска .
  • TableView с функцией search (в идеале, поиск должен быть разделен между картой и TableView).
  • Один вид для отображения сведений о выбранном элементе, независимо от вида источника (карта или таблица).
  • Вид карты должен иметь кнопку для отображения вида списка и наоборот.

Я сомневаюсь, что я должен гнездиться где? У меня есть NavigationController с его View Controller , настроенным на другой класс с собственным xib, но я не знаю, как продолжить.

Должен ли я создать представление с панелью поиска и другим подвидом для переключения между картой и таблицей? Или лучше иметь два полноценных просмотра, каждый со своей строкой поиска?

РЕДАКТИРОВАТЬ 1

Наконец, я решил реализовать следующую структуру:

   - TabBarController
       - LugaresNavController (UINavigationController)
           - LugaresViewController (UIViewController)
               - UISearch 
               - SubView (UIView)
               - MapViewController (UIViewController)
               - TableViewController (UITableViewController)

MapViewController и TableViewController имеют свои собственные xib файлы. Я хочу иметь возможность переключаться между ними на SubView, но я не могу это сделать.

Я назначил владельца файла MapViewController и TableViewController их соответствующему классу в файлах xib, а также указал, какой xib загружать в атрибутах их представления в xib, соответствующих LugaresViewController, что является их родитель.

Когда я запускаю приложение, все, что я вижу, это TabBar с NavBar и UISearch. Кадр, в котором SubView должен отображать либо карту, либо таблицу, в которой пусто ...

Что я здесь не так делаю?

Ответы [ 3 ]

1 голос
/ 06 апреля 2011

Ваша фундаментальная проблема заключается в том, что вы путаете разные иерархии родитель-потомок.

Напомним, что MVC - это модель, представление и контроллер.

В iOS есть две разные иерархии родитель-потомок: Один для контроллеров и один для представлений.

Следующие элементы являются частью иерархии родитель-потомок контроллера:

- TabBarController
    - LugaresNavController (UINavigationController)
        - LugaresViewController (UIViewController)

Это означает, что LugaresViewController.parentViewController должен быть LugaresNavController и т. Д..

Однако следующее не имеет никакого смысла:

- SubView (UIView)
    - MapViewController (UIViewController)
    - TableViewController (UITableViewController)

Представления могут иметь подпредставления, но представления не могут иметь контроллеров подпредставлений,

Вы делаете следующее?

- SubView (UIView)
    - MapViewController.view (UIViewController s view is a subview of Subview)
    - TableViewController.view (UITableViewController s view is a subview of Subview)

Это представление родительско-дочерняя иерархия.Это означает, что:

  1. SubView имеет два подпредставления (MapViewController.view и TableViewController.view)
  2. MapViewController.parentViewController имеет значение nil.
  3. MapViewController.navigationController равно nil.

вы можете использовать переходы вида для переключения между MapViewController.view и TableViewController.view, но не переходы viewController (например, presentModal ... или push или pop ViewController ...).

Если это то, что вы хотите, то вам просто нужно убедиться, что вы делаете:

[SubView addSubview: MapViewController.view];
[SubView addSubview: TableViewController.view];

Кстати, SubView - ужасное имя.Обычно мы называем это containerView или что-то в этом роде.подпредставление является настолько важным понятием, что вы хотите иметь возможность дифференцировать понятие подпредставления от экземпляра этого представления.Это все равно, что назвать своего ребенка "Малыш" или свою собаку "Щенок".

0 голосов
/ 04 апреля 2011

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

Окно UIWindow должно содержать подпредставление.Это будет либо таблица, либо карта.Когда вы впервые загружаете приложение и показываете, скажем, таблицу, вы должны сделать:

[window addSubview:tableViewController];

Когда вы переключаетесь на просмотр карты, вы делаете что-то вроде:

[tableViewController removeFromSuperview];
[window addSubview:mapViewController];

Итак, для переключения представлений в игру вступает UITabBar.Убедитесь, что на вкладке есть два сегмента.Подключите IBAction к этому, который выглядит примерно так:

-(IBAction)segmentedControlIndexChanged {
   switch (segmentedControl.selectedSegmentIndex} {
      case 0:
         <call function for removing mapview and adding tableview>

      case 1:
         <call function for removing tableview and adding mapview>

      default:
         break;
   }
}

Последний, но не менее важный, что может быть ответом на ваши изменения: убедитесь, что вы подключили все соединители в Интерфейсном Разработчике (или, если вы используете XCode 4, только .xib-файл), из .xib к владельцу файла.

РЕДАКТИРОВАТЬ: Конечно, детальный просмотр для элементов, нажатых на таблицу / карту, выдвигаетсяв элементе навигации, поэтому кнопка возврата автоматически создается и функционирует в подробном представлении.

Удачи!

0 голосов
/ 02 апреля 2011

ваше приложение похоже на мое, что я и сделал:

- TabBarController
  - TableView
    - SearchBar
    - DetailButton ----\
  - MapView             \____ push ModalViewController
    - SearchBar         /
    - DetailButton ----/

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

Сначала попробуйте добавить TableView и MapView в каждую вкладку и посмотрите, хорошо ли работает привязка пера.Если нет, то вы что-то упустили, загрузите nib или тип классаПосле этого вы можете добавить SearchBarController и предоставить для этого функциональность.

...