Как переключать виды в какао-тач?

У меня есть два контроллера представления с именами «view1ViewController» и «view2ViewController» в проекте какао-тач, и они оба связаны с UIView в раскадровке. Скажем, я поместил кнопку в view1. Codewise, какой самый простой способ переключиться на view2 после того, как я нажму эту кнопку? Какой код мне нужно ввести, чтобы заставить это работать?

-- Обновлять --

Несмотря на то, что вы все рассказали мне об этом, я все еще не могу заставить это работать. Может я чего-то не догоняю? Нужно ли мне добавить что-то еще? Вот код для view1ViewController.m:

#import "view1ViewController.h"
#import "view2ViewController.h"


@interface view1ViewController ()

@property (nonatomic, strong) view2ViewController *controller;

@end

@implementation view1ViewController
@synthesize controller = _controller;

- (view2ViewController *)controller
{
    if (!_controller) {
        _controller = [[view2ViewController alloc] init];
    }
    return _controller;
}

- (IBAction)buttonPressed {
    [self.navigationController pushViewController:self.controller animated:YES];
}
@end

Я не трогал другие файлы и обязательно установил класс добавленного представления в раскадровке на view2ViewController.


person blake305    schedule 24.12.2011    source источник
comment
Xcode — это просто IDE, поэтому правильным ответом будет: совсем нет.   -  person vikingosegundo    schedule 24.12.2011
comment
Вам нужно сделать это в коде, или вам подойдет подход, основанный на переходе?   -  person Sergey Kalinichenko    schedule 24.12.2011
comment
Мне не очень нравится подход, основанный на переходе, потому что я пытаюсь разработать приложение, которое использует довольно динамичный подход к представлению,   -  person blake305    schedule 24.12.2011
comment
Возможно, есть куча разных вещей, которые вам нужно сделать, чтобы справиться с раскадровками. Если вы не собираетесь использовать раскадровки, я бы предложил создать проект, в котором вместо этого используются xib-файлы конструктора интерфейсов. Я не очень разбираюсь в раскадровках, поэтому ничем помочь не могу. Для (надеюсь) быстрого исправления вы можете запустить переход программно. Можете ли вы отредактировать ответ и вставить полное сообщение об ошибке?   -  person Jack Lawrence    schedule 24.12.2011
comment
Если вы используете UIView, вы не используете Cocoa, вы используете Cocoa Touch. Я отредактировал ваш вопрос соответственно.   -  person Peter Hosey    schedule 25.12.2011


Ответы (2)


Просто

[self.navigationController pushViewController:view2ViewController animated:YES];

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

Я предположил, что ваше приложение основано на навигации. Если это не так, вам необходимо инициализировать файл UINavigationController. Например, в вашем делегате приложения в вашем методе didFinishLaunchingWithOptions: вы можете сделать что-то вроде

navigationController = [[UINavigationController alloc] init];
[self.window addSubview:navigationController.view];
[navigationController pushViewController:self.viewController animated:NO];

[self.window addSubview:navigationController.view];
[self.window makeKeyAndVisible];

где navigationController – это UINavigationController, установленный как @property.

Если вы не хотите настраивать UINavigationController, вы можете выбрать модальное представление другого представления, используя

[self presentModalViewController:view2ViewController animated:YES];
person Manlio    schedule 24.12.2011
comment
мне нужно #import что-нибудь в любых файлах? потому что он говорит неожиданное имя вывода view2ViewController - person blake305; 24.12.2011
comment
Вы должны импортировать файл заголовка для view2ViewController в любой файл, из которого вы хотите сослаться на него. Также помните, что если вы не используете ARC, вам нужно освободить свой view2viewcontroller: View2ViewController *controller = [[View2ViewController alloc] init]; [self.navigationController pushViewController: анимированный контроллер: YES]; [выпуск контроллера]; - person Jack Lawrence; 24.12.2011
comment
Это все еще не работает. Вы можете прочитать мое обновление в основном посте? Ваш комментарий был очень полезен, кстати, Джек! - person blake305; 24.12.2011
comment
Хм. Хорошо, я вижу, что вы определяете собственный метод получения для контроллера. Вам не нужен этот метод (- (view2ViewController *) контроллер). Хотя я не думаю, что это неправильно. - person Jack Lawrence; 24.12.2011
comment
Предполагает ли xcode автоматически, что контроллер является подклассом UIViewController? - person blake305; 24.12.2011
comment
Кроме того, это не вид навигации. Это пустой вид. - person blake305; 24.12.2011
comment
Конечно, вы должны указать, что это подкласс UIViewController в определении вашего интерфейса. Кроме того, я отредактировал пост, добавив немного информации о навигационном контроллере. - person Manlio; 24.12.2011

Если вы не настроили навигационный контроллер, этот подход не сработает. Чтобы настроить контроллер навигации, необходимо убедиться, что текущее представление является корневым контроллером представления для контроллера навигации. Это можно сделать программно, но если вы используете раскадровку, будет намного проще встроить представление в контроллер навигации. Как только контроллер на месте, толкание должно работать.

Для встраивания раскадровки перейдите в верхнее меню и выберите Правка->Встроить в контроллер навигации.

Чтобы сделать это через код, где бы вы ни создавали это представление, вместо этого напишите его как

UINavigationController *navigationController = [[UINavigationController alloc] initWithRootViewController:view1ViewController];

Затем добавьте контроллер навигации везде, где вы добавили view1ViewController.

person Kinetic Stack    schedule 24.12.2011