Переключение пользовательских видов программно (нажатие и выталкивание) - PullRequest
3 голосов
/ 09 августа 2011

В iOS мои представления работают индивидуально, но я не могу переключаться между ними.

Теперь, после долгих поисков в Google, мне показалось, что приложение на основе навигации будет прекрасно работать со стеком для представлений. Проблема в том, что все мои представления не содержат ни nib / xib, а специально адаптированы к исходному коду. Из-за этого мне нужен мой собственный UINavigationController и push и pop представления вручную / кодом. Поскольку каждый учебник связан либо с nib / xib и IB, либо просто с фрагментами кода, мне нужен конкретный пример, как это сделать.

Простой пример с двумя программно созданными представлениями (может быть пустым, просто нужно использовать loadView вместо инициализации с помощью nib / xib) и рабочим стеком (push и pop представлений, таких как: загрузить приложение, создать некоторый root если нужно, нажмите один вид, а из этого представления нажмите второй, а затем извлеките их). Это было бы замечательно, или, по крайней мере, учебное пособие таким образом со всем источником проекта, а не с фрагментами.

Спасибо заранее.

РЕДАКТИРОВАТЬ: После некоторых дополнительных размышлений, немного больше разъяснений не будет плохим. Мое приложение в основном будет состоять из 5 или 6 представлений, которые будут называться из их предыдущего представления, то есть развернутого приложения.

1 Ответ

4 голосов
/ 09 августа 2011

Вот краткий код, только основные части:

CodeViewsPushingAppDelegate.m

#import "CodeViewsPushingAppDelegate.h"
#import "ViewNumberOne.h"
@implementation CodeViewsPushingAppDelegate

@synthesize window = _window;

- (BOOL)application:(UIApplication *)application didFinishLaunchingWithOptions:    (NSDictionary *)launchOptions
{
    UINavigationController *navController = [[UINavigationController alloc] init];
    ViewNumberOne *view1 = [[ViewNumberOne alloc] init];
    [navController pushViewController:view1 animated:NO];
    [self.window addSubview:navController.view];
    [self.window makeKeyAndVisible];
    return YES;
}

ViewNumberOne.h

#import <UIKit/UIKit.h>

@interface ViewNumberOne : UIViewController
{
    UIButton *button;
}

- (void)pushAnotherView;

@end

ViewNumberOne.m

#import "ViewNumberOne.h"
#import "ViewNumberTwo.h"
@implementation ViewNumberOne

- (void)loadView
{
    [super loadView];
    button = [UIButton buttonWithType:UIButtonTypeRoundedRect];
    button.frame = CGRectMake(110, 190, 100, 20);
    [button setTitle:@"Push Me!" forState:UIControlStateNormal];
    [button addTarget:self action:@selector(pushAnotherView) forControlEvents:UIControlEventTouchUpInside];
    [self.view addSubview:button];
}

- (void)pushAnotherView;
{
    ViewNumberTwo *view2 = [[ViewNumberTwo alloc] init];
    [self.navigationController pushViewController:view2 animated:YES];
    [view2 release];
}

ViewNumberTwo.h

#import <UIKit/UIKit.h>

@interface ViewNumberTwo : UIViewController
{
    UILabel *label;
}

@end

ViewNumberTwo.m

#import "ViewNumberTwo.h"

@implementation ViewNumberTwo

- (void)loadView
{
    [super loadView];
    label = [[UILabel alloc] init];
    label.text = @"I am a label! This is view #2";
    label.numberOfLines = 2;
    label.textAlignment = UITextAlignmentCenter;
    label.frame = CGRectMake(50, 50, 200, 200); //whatever
    [self.view addSubview:label];
}
...