iPhone: как запустить загрузку представления с помощью элемента пользовательского интерфейса в предыдущем представлении - PullRequest
0 голосов
/ 09 марта 2010

Я читал книгу Head First iPhone Development , и я понимаю, как добраться до нового представления из таблицы, но как именно я смогу добраться до нового представления или контроллера представления, просто нажав кнопку? Это вообще возможно?

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

Ответы [ 3 ]

0 голосов
/ 09 марта 2010

Как сказал bpapa в комментариях, трудно быть конкретным без кода. Однако, как правило, вы хотите сделать следующее:

  • Создание контроллера навигации, который содержит один исходный вид.
  • Создайте кнопку в исходном виде с помощью Interface Builder.
  • Создание метода обратного вызова (обычно определяемого IBAction), который запускается при нажатии кнопки.
  • В этом методе обратного вызова создайте новое представление и поместите его на контроллер навигации так же, как при использовании ячейки табличного представления.

В качестве альтернативы, если вам нужен только один уровень иерархии, вы можете использовать модальный контроллер вида; вместо того, чтобы нажимать на контроллер навигации в последнем шаге, просто представьте модальный контроллер вида.

0 голосов
/ 09 марта 2010

Общий ответ таков: у вас есть объект, который управляет тем, какой контроллер представления загружается, когда.

Чаще всего используется UINavigationController . Это UIViewController, который вместо управления представлениями контролирует другие контроллеры представления. Это работает как простой стек. Вы помещаете представления, которые хотите отобразить, в стек контроллеров навигационной системы, а когда хотите, чтобы они исчезли, вы отключаете их.

Распространенный (хотя и небрежный) способ использования навигационной системы - сделать ее свойством делегата приложения. Тогда в любом месте вашего приложения вы можете ссылаться на него:

UINavigationController *nav=[[[UIApplication sharedApplication] delegate] navigationController];

Контроллер вида для первого, который видит пользователь, содержится в свойстве nav1 topViewController. Если вы хотите загрузить представление на основе действий пользователя в topViewController.view, у вас будет что-то вроде этого:

- (IBAction) loadNextView:(id) sender{ // Action called by a a UI event such as a button press. 
    UINavigationController *nav=[[[UIApplication sharedApplication] delegate] navigationController];
    UIViewController *nextViewController=...// load from nib, connect with IBOutlet, create programmatically
    [nav pushViewController:nextView animated:YES];
}

Первый вид исчезает и заменяется следующим. Чтобы вернуться к первому виду, у вас есть метод в следующем контроллере вида, например:

- (IBAction) unloadSelf:(id) sender{ // Action called by a a UI event such as a button press. 
    UINavigationController *nav=[[[UIApplication sharedApplication] delegate] navigationController];

    [nav popViewControllerAnimated:YES];
}

... и навигационная панель автоматически возвращает вас к предыдущему виду независимо от того, каким оно было.

При первом запуске, особенно если вы используете Interface Builder, структура приложения в значительной степени скрыта. За кулисами все контроллеры представлений и их представления существуют в некоторой иерархии, которая ведет обратно к делегату приложения. Вы должны научиться мыслить иерархически, даже если не сразу очевидно, как устроена эта иерархия.

0 голосов
/ 09 марта 2010

Я думаю, что вы ищете модальный контроллер VEW. Это представляет модальный вид, как вы описали поверх всего остального. Если rootViewController - это контроллер представления, отображающий ваше текущее представление, а myNewViewController - контроллер представления, который вы хотите отобразить модально:

[rootViewController presentModalViewController:myNewViewController animated:YES];

В сети множество примеров такого рода вещей, просто поищите presentModalViewController

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