2011-12-24 1 views
0

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

- Обновление -

Несмотря на то, что вы все сказали мне об этом, я до сих пор не могу получить эту работу. Может быть, я чего-то не получаю? Нужно ли добавлять что-то еще? Вот код для 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.

+0

Xcode - это только IDE - так что правильный ответ был бы: совсем нет – vikingosegundo

+0

Вам нужно сделать это в коде, или будет работать подход на основе segue? – dasblinkenlight

+0

Мне не очень нравится подход, основанный на segue, потому что я пытаюсь разработать приложение, которое использует довольно динамичный подход к представлению. – blake305

ответ

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]; 
+0

Мне нужно что-нибудь импортировать в любые файлы? потому что он говорит о неожиданном имени вывода «view2ViewController» – blake305

+0

Вы должны #import заголовочный файл для view2ViewController в любом файле, с которым вы хотите ссылаться. Также помните, что если вы не используете ARC, вы захотите освободить свой view2viewcontroller: View2ViewController * controller = [[View2ViewController alloc] init]; [self.navigationController pushViewController: контроллер анимированный: YES]; [выпуск контроллера]; –

+0

Он все еще не работает. Можете ли вы прочитать мое обновление в главном посте? Ваш комментарий был очень полезен BTW, Джек! – blake305

1

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

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

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

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

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