2012-06-29 1 views
0

В Xcode 4.2 я знаю, что можно использовать раскадровку, чтобы нажать кнопку, чтобы перейти к другому виду.XCode 4.2 нажмите кнопку переключения на другой вид

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

EDIT: добавлен исходные коды

AppDelegate.h

// 
// AppDelegate.h 
// Sandbox1 
// 
// Created on 6/29/12. 
// Copyright (c) 2012 __MyCompanyName__. All rights reserved. 
// 

#import <UIKit/UIKit.h> 
#import "ViewController.h" 

@interface AppDelegate : UIResponder <UIApplicationDelegate> 

@property (strong, nonatomic) UIWindow *window; 
@property (strong, nonatomic) ViewController *viewController; 
@property (nonatomic, retain) UINavigationController *navController; 

@end 

AppDelegate.m

// 
// AppDelegate.m 
// Sandbox1 
// 
// Created on 6/29/12. 
// Copyright (c) 2012 __MyCompanyName__. All rights reserved. 
// 

#import "AppDelegate.h" 

@implementation AppDelegate 

@synthesize window = _window; 
@synthesize viewController; 
@synthesize navController; 

- (BOOL)application:(UIApplication *)application didFinishLaunchingWithOptions:(NSDictionary  *)launchOptions 
{ 
    // Override point for customization after application launch. 

    self.window = [[UIWindow alloc] initWithFrame:[[UIScreen mainScreen] bounds]]; 
    self.viewController = [[ViewController alloc] initWithNibName:@"ViewController_iPhone"  bundle:nil]; 
    navController = [[UINavigationController alloc] initWithRootViewController:self.viewController]; 
    [self.window addSubview:[navController view]]; 
    [self.window makeKeyAndVisible]; 

    return YES; 
} 

- (void)applicationWillResignActive:(UIApplication *)application 
{ 
} 

- (void)applicationDidEnterBackground:(UIApplication *)application 
{ 
} 

- (void)applicationWillEnterForeground:(UIApplication *)application 
{ 
} 

- (void)applicationDidBecomeActive:(UIApplication *)application 
{ 
} 

- (void)applicationWillTerminate:(UIApplication *)application 
{ 
} 

@end 

ViewController.h

// 
// ViewController.h 
// Sandbox1 
// 
// Created on 6/29/12. 
// Copyright (c) 2012 __MyCompanyName__. All rights reserved. 
// 

#import <UIKit/UIKit.h> 
#import "CreateViewController.h" 

@interface ViewController : UIViewController { 
    CreateViewController *createViewController; 
} 

- (IBAction)clickButton:(id)sender; 

@end 

ViewController.m

// 
// ViewController.m 
// Sandbox1 
// 
// Created on 6/29/12. 
// Copyright (c) 2012 __MyCompanyName__. All rights reserved. 
// 

#import "ViewController.h" 

@implementation ViewController 

- (IBAction)clickButton:(id)sender{ 
    if(!createViewController){ 
     createViewController = [[CreateViewController alloc] initWithNibName:@"CreateViewController" bundle:nil]; 
    } 
    UIBarButtonItem *backBarButtonItem = [[UIBarButtonItem alloc] initWithTitle:@"Back" style:UIBarButtonItemStylePlain target:nil action:nil]; 
    self.navigationItem.backBarButtonItem = backBarButtonItem; 
    [self.navigationController pushViewController:createViewController animated:YES]; 
} 

- (void)didReceiveMemoryWarning 
{ 
    [super didReceiveMemoryWarning]; 
    // Release any cached data, images, etc that aren't in use. 
} 

#pragma mark - View lifecycle 

- (void)viewDidLoad 
{ 
    [super viewDidLoad]; 
// Do any additional setup after loading the view, typically from a nib. 
} 

- (void)viewDidUnload 
{ 
    [super viewDidUnload]; 
    // Release any retained subviews of the main view. 
    // e.g. self.myOutlet = nil; 
} 

- (void)viewWillAppear:(BOOL)animated 
{ 
    [super viewWillAppear:animated]; 
} 

- (void)viewDidAppear:(BOOL)animated 
{ 
    [super viewDidAppear:animated]; 
} 

- (void)viewWillDisappear:(BOOL)animated 
{ 
    [super viewWillDisappear:animated]; 
} 

- (void)viewDidDisappear:(BOOL)animated 
{ 
    [super viewDidDisappear:animated]; 
} 

- (BOOL)shouldAutorotateToInterfaceOrientation:(UIInterfaceOrientation)interfaceOrientation 
{ 
    // Return YES for supported orientations 
    return (interfaceOrientation != UIInterfaceOrientationPortraitUpsideDown); 
} 

@end 

CreateViewController.h

// 
// CreateViewController.h 
// Sandbox1 
// 
// Created bon 6/29/12. 
// Copyright (c) 2012 __MyCompanyName__. All rights reserved. 
// 

#import <UIKit/UIKit.h> 

@interface CreateViewController : UIViewController 

@end 

CreateViewController.m

// 
// CreateViewController.m 
// Sandbox1 
// 
// 

#import "CreateViewController.h" 

@implementation CreateViewController 

- (id)initWithNibName:(NSString *)nibNameOrNil bundle:(NSBundle *)nibBundleOrNil 
{ 
    self = [super initWithNibName:nibNameOrNil bundle:nibBundleOrNil]; 
    if (self) { 
     // Custom initialization 
    } 
    return self; 
} 

- (void)didReceiveMemoryWarning 
{ 
    // Releases the view if it doesn't have a superview. 
    [super didReceiveMemoryWarning]; 

    // Release any cached data, images, etc that aren't in use. 
} 

#pragma mark - View lifecycle 

/* 
// Implement loadView to create a view hierarchy programmatically, without using a nib. 
- (void)loadView 
{ 
} 
*/ 

/* 
// Implement viewDidLoad to do additional setup after loading the view, typically from a nib. 
- (void)viewDidLoad 
{ 
    [super viewDidLoad]; 
} 
*/ 

- (void)viewDidUnload 
{ 
    [super viewDidUnload]; 
    // Release any retained subviews of the main view. 
    // e.g. self.myOutlet = nil; 
} 

- (BOOL)shouldAutorotateToInterfaceOrientation:(UIInterfaceOrientation)interfaceOrientation 
{ 
    // Return YES for supported orientations 
    return (interfaceOrientation == UIInterfaceOrientationPortrait); 
} 

@end 
+0

Это не свалка кода. –

ответ

0

Я думаю, что кнопка находится в FirstViewController. Если он затем реализует - (IBAction)clickButton и записывает код и подключает его к нижней части в Interface Builder (если вы используете Interface Builder). напишите объект createViewController и #import <CreateViewController.h> в FirstViewController.h, и вы должны использовать UINavigationController.

В FirstViewController.h,

#import "CreateViewController.h" 

@interface FirstViewController : UIViewController{ 

    CreateViewController *createViewController; 
} 
-(IBAction)clickButton:(id)sender; 
@end 

В FirstViewController.m, вы просто добавить ниже метод

-(IBAction)clickButton:(id)sender{ 

if (!createViewController) { 
       createViewController = [[CreateViewController alloc] initWithNibName:@"CreateViewController" bundle:nil]; 

      } 

      UIBarButtonItem *backBarButtonItem = [[UIBarButtonItem alloc] initWithTitle:@"Back" style:UIBarButtonItemStylePlain target:nil action:nil]; 
      self.navigationItem.backBarButtonItem = backBarButtonItem; 
      [backBarButtonItem release]; 
      [self.navigationController pushViewController:createViewController animated:YES]; 
} 

и AppDelegate.h,

#import "FirstViewController.h" 
@interface AppDelegate : UIResponder <UIApplicationDelegate> 

@property (strong, nonatomic) UIWindow *window; 
@property (strong, nonatomic) FirstViewController *viewController; 
@property (nonatomic, retain) UINavigationController *navControl; 
@end 

В AppDelegate.m,

@synthesize window; 
@synthesize viewController; 
@synthesize navControl; 

- (BOOL)application:(UIApplication *)application didFinishLaunchingWithOptions:(NSDictionary *)launchOptions 
{ 

    self.window = [[[UIWindow alloc] initWithFrame:[[UIScreen mainScreen] bounds]] autorelease]; 
    self.viewController = [[[ViewController alloc] initWithNibName:@"ViewController_iPhone" bundle:nil] autorelease]; 
    navControl = [[UINavigationController alloc] initWithRootViewController:self.viewController]; 
[self.window addSubview:[navControl view]]; 
    [self.window makeKeyAndVisible]; 
    return YES; 
} 
+0

Привет, Прасад, спасибо за помощь. Я следил за вашими кодами, и я запускаю приложение на симуляторе, я получил ошибку, как показано ниже ... 2012-06-29 15: 57: 56.444 Sandbox1 [2057: 207] *** Завершение приложения из-за неперехваченного исключения «NSInternalInconsistencyException» , причина: «Не удалось загрузить NIB в комплекте:« NSBundle (загружен) 'с имя 'ViewController_iPhone' ' Что я пропустил? –

+0

Вы подключили кнопку к методу ClickButton в .xib-файле? –

+0

Ну, у меня есть ctrl и щелкните левой кнопкой мыши и перетащите кнопку из раскадровки (не xib) в - (IBAction) clickButton: (id) отправитель; в файле ViewController.h. Тем не менее, у меня появился черный экран, затем я получил ошибку SIGABRT и ошибку, о которой я упоминал выше. –

Смежные вопросы