2013-01-07 3 views
0

Je veux savoir s'il est possible de faire une application multi-vue sans utiliser Interface Builder.Multi vue App Programatically

Je sais comment faire avec simplement utiliser Xcode et Storyboards, mais je veux juste pouvoir le faire par programmation.

Par exemple: Si j'ai un UIViewController A (vue par défaut) avec un UIButton et que j'ai une autre UIViewController B avec UIWebView quand je clique sur le UIButton de UIViewController AI veulent pouvoir afficher la deuxième vue (Sans IB).

Comment puis-je définir l'action sur le UIButton pour afficher ma deuxième vue (sans interface)?

+1

Où est la question? – Lefteris

+0

J'ai éditer ma question pour la clarté, p – IndiaNasirJones

+0

Ceci est parfaitement possible et peut être trouvé sur google très facilement. Avez-vous fait des recherches? – Popeye

Répondre

1

Vous pouvez ajouter une cible à votre bouton:

[button addTarget:self action:@selector(buttonPressed:) forControlEvents:UIControlEventTouchUpInside]; 

Puis, en ControllerA, ajoutez cette méthode:

-(void)buttonPressed:(id)sender 
{ 
    [self.superview addSubview:controllerB.view]; 
    [self.view removeFromSuperview]; 
} 
+0

Merci pour vos réponses – IndiaNasirJones

1

Sur ViewControllerA

- (void)viewDidLoad 
    { 

     UIButton *btn=[UIButton buttonWithType:UIButtonTypeRoundedRect]; 
     [btn setFrame:CGRectMake(50.0f,200.0f,60.0f,30.0f)]; 
     [btn setTitle:@"Next" forState:UIControlStateNormal]; 
     [btn setTitleColor:[UIColor blackColor] forState:UIControlStateHighlighted]; 
     [btn addTarget:self action:@selector(btnPressed:) forControlEvents:UIControlEventTouchUpInside]; 
     [self.view addSubview:btn]; 
     [super viewDidLoad]; 
     // Do any additional setup after loading the view, typically from a nib. 
    } 
    -(IBAction)btnPressed:(id)sender 
    { 
     NextViewController *nxt=[[NextViewController alloc]initWithNibName:nil bundle:nil]; 
     [self.navigationController pushViewController:nxt animated:YES]; 
    } 

Sur viewControllerB

- (void)viewDidLoad 
    { 
     UIWebView *webView = [[UIWebView alloc] initWithFrame:CGRectMake(0,0, 320, 460)];  
     NSURL *targetURL = [NSURL URLWithString:@"http://developer.apple.com/iphone/library/documentation/UIKit/Reference/UIWebView_Class/UIWebView_Class.pdf"]; 
     NSURLRequest *request = [NSURLRequest requestWithURL:targetURL]; 
     [webView loadRequest:request]; 

     [self.view addSubview:webView]; 
    } 

Assurez-vous que AppDelegate.h devrait être contrôleur de navigation comme celui-ci

- (BOOL)application:(UIApplication *)application didFinishLaunchingWithOptions:(NSDictionary *)launchOptions 
{ 
    self.window = [[UIWindow alloc] initWithFrame:[[UIScreen mainScreen] bounds]]; 
    // Override point for customization after application launch. 
    self.viewController = [[ViewController alloc] initWithNibName:@"ViewController" bundle:nil]; 
    UINavigationController* navController = [[UINavigationController alloc] initWithRootViewController:self.self.viewController ]; 
    self.window.rootViewController = navController; 
    [self.window makeKeyAndVisible]; 
    return YES; 
} 
+0

merci de son travail comme un charme;) – IndiaNasirJones

+1

'viewDidLoad' n'est pas un lieu pour ajouter des sous-vues. Puisque OP crée tout dans le code, la méthode 'loadView' devrait être implémentée dans la sous-classe de UIViewController. – Eimantas