2013-12-23 6 views
25

ВопросНавигационный контроллер Нажмите View Controller

Как перейти с одного контроллера на другой вид просто с помощью коснуться кнопки в вверх внутри события?

Подробнее

То, что я пытался в демонстрационном проекте, ступенчато, был:

  1. Создать образец одного приложения просмотра.

  2. Добавить новый файл -> Objective-C Class с XIB для пользовательского интерфейса (ViewController2).

  3. Добавить кнопку в ViewController.xib и управлять кнопкой мыши на ViewController.h для создания касания внутри события.

  4. Перейти к новоиспеченному IBAction в ViewController.m и изменить его к этому ...

    - (IBAction)GoToNext:(id)sender 
    { 
        ViewController2 *vc2 = [[ViewController2 alloc] initWithNibName:@"ViewController2" bundle:nil]; 
    
        [[self navigationController] pushViewController:vc2 animated:YES]; 
    } 
    

код работает без ошибок и я проверил функциональность кнопки с NSLog. Однако он до сих пор не переводит меня ко второму контроллеру. Любая помощь будет оценена по достоинству.

+0

Вы действительно создали контроллер навигации и добавили его в интерфейс? Повторяется ли ссылка '' self navigationController '' как нуль? – ColinE

ответ

46

Swift3

**Push** 

сделать как

let storyboard = UIStoryboard(name: "Main", bundle: nil) 
let vc = storyboard.instantiateViewControllerWithIdentifier("NewsDetailsVCID") as NewsDetailsViewController 
vc.newsObj = newsObj 
navigationController?.pushViewController(vc, 
animated: true) 

или безопаснее

if let viewController = UIStoryboard(name: "Main", bundle: nil).instantiateViewController(withIdentifier: "NewsDetailsVCID") as? NewsDetailsViewController { 
     viewController.newsObj = newsObj 
     if let navigator = navigationController { 
      navigator.pushViewController(viewController, animated: true) 
     } 
    } 

настоящее

let storyboard = UIStoryboard(name: "Main", bundle: nil) 
    let vc = self.storyboard?.instantiateViewControllerWithIdentifier("NewsDetailsVCID") as! NewsDetailsViewController 
     vc.newsObj = newsObj 
      present(vc!, animated: true, completion: nil) 

или безопаснее

if let vc = UIStoryboard(name: "Main", bundle: nil).instantiateViewController(withIdentifier: "NewsDetailsVCID") as? NewsDetailsViewController 
    { 

    vc.newsObj = newsObj 
    present(vc, animated: true, completion: nil) 
    } 





//Appdelegate.m 

- (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 *navigation = [[UINavigationController alloc]initWithRootViewController:self.viewController]; 
    self.window.rootViewController = navigation; 
    [self.window makeKeyAndVisible]; 
    return YES; 
} 


//ViewController.m 

- (IBAction)GoToNext:(id)sender 
{ 
    ViewController2 *vc2 = [[ViewController2 alloc] init];  
    [self.navigationController pushViewController:vc2 animated:YES]; 
} 

быстры

//Appdelegate.swift 

func application(application: UIApplication, didFinishLaunchingWithOptions launchOptions: NSDictionary?) -> Bool { 
    self.window = UIWindow(frame: UIScreen.mainScreen().bounds) 

    let navigat = UINavigationController() 
    let vcw = ViewController(nibName: "ViewController", bundle: nil) 

    // Push the vcw to the navigat 
    navigat.pushViewController(vcw, animated: false) 

    // Set the window’s root view controller 
    self.window!.rootViewController = navigat 

    // Present the window 
    self.window!.makeKeyAndVisible() 
    return true 
} 

//ViewController.swift 

@IBAction func GoToNext(sender : AnyObject) 
{ 
    let ViewController2 = ViewController2(nibName: "ViewController2", bundle: nil) 
    self.navigationController.pushViewController(ViewController2, animated: true) 
} 
+0

Спасибо, я не знаю, почему я не помню делать этот шаг раньше, но наверняка это сработало для меня. –

+1

Хмм, хорошо, каждый раз не забывайте, что это делают в делете приложения, k –

+0

i m, используя appdelegate через контроллер представления вида, но что для back view controllerin swift 3.0 –

-1

Сначала создайте контроллер навигации и предоставьте его как rootViewController вашего оконного объекта.

0

UINavigationController автоматически не представлены в UIViewController.

Это то, что вы должны увидеть в Interface Builder.У владельца файла есть точка доступа к навигационному контроллеру, а от навигационного контроллера - выход к реальному виду;

Interface Builder

+0

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

+0

Откройте нить вашего ViewController и измените его, как я объяснил. –

2

Для Swift использовать следующий код:

func application(application: UIApplication, didFinishLaunchingWithOptions launchOptions: NSDictionary?) -> Bool { 
    self.window = UIWindow(frame: UIScreen.mainScreen().bounds) 
    self.window!.backgroundColor = UIColor.whiteColor() 

    // Create a nav/vc pair using the custom ViewController class 

    let nav = UINavigationController() 
    let vc = NextViewController(nibName: "NextViewController", bundle: nil) 

    // Push the vc onto the nav 
    nav.pushViewController(vc, animated: false) 

    // Set the window’s root view controller 
    self.window!.rootViewController = nav 

    // Present the window 
    self.window!.makeKeyAndVisible() 
    return true 

} 

ViewController:

@IBAction func Next(sender : AnyObject) 
{ 
    let nextViewController = DurationDel(nibName: "DurationDel", bundle: nil) 

    self.navigationController.pushViewController(nextViewController, animated: true) 
} 
9
UIStoryboard* storyboard = [UIStoryboard storyboardWithName:@"storyBoardName" bundle:nil]; 
MemberDetailsViewController* controller = [storyboard instantiateViewControllerWithIdentifier:@"viewControllerIdentiferInStoryBoard"]; 

[self.navigationController pushViewController:viewControllerName animated:YES]; 
0

Это работает идеально:

PD: Не забудьте импортировать VC назначения:

#import "DestinationVCName.h" 

    - (IBAction)NameOfTheAction:(id)sender 
{ 
     DestinationVCName *destinationvcname = [self.storyboard instantiateViewControllerWithIdentifier:@"DestinationVCName"]; 
    [self presentViewController:destinationvcname animated:YES completion:nil]; 
} 
0
- (void) loginButton:(FBSDKLoginButton *)loginButton 
didCompleteWithResult:(FBSDKLoginManagerLoginResult *)result 
       error:(NSError *)error{ 
    UINavigationController *nav = [self.storyboard instantiateViewControllerWithIdentifier:@"nav"]; 
    ViewController *vc = [self.storyboard instantiateViewControllerWithIdentifier:@"LoggedInVC"]; 
    [nav pushViewController:vc animated:YES]; 
    [self presentViewController:nav animated:YES completion:nil]; 
} 

«нав» является Раскадровка ID для моего навигации контроллера «В.-» является Раскадровка ID для моего первого контроллера представления, подключенного к моей навигации контроллера

-hope это помогает

0

AppDelegate к ViewController:

let mainStoryboard: UIStoryboard = UIStoryboard(name: "Main", bundle: nil) 
let loginPageView = mainStoryboard.instantiateViewControllerWithIdentifier("leadBidderPagerID") as! LeadBidderPage 
var rootViewController = self.window!.rootViewController as! UINavigationController 
rootViewController.pushViewController(loginPageView, animated: true) 

Между ViewControllers:

let loginPageView = self.storyboard?.instantiateViewControllerWithIdentifier("scoutPageID") as! ScoutPage 
self.navigationController?.pushViewController(loginPageView, animated: true) 
0

Если вы используете Swift:

let controller = self.storyboard!.instantiateViewControllerWithIdentifier("controllerID") 
self.navigationController!.pushViewController(controller, animated: true) 
1

Используя этот код Перемещение следующий ViewController, если вы используете раскадровки средства следуют за этим ниже код,

UIStoryboard *board; 

if (!self.storyboard) 
{ 
    board = [UIStoryboard storyboardWithName:@"Main" bundle:nil]; 
} 
else 
{ 
    board = self.storyboard; 
} 

ViewController *View = [board instantiateViewControllerWithIdentifier:@"yourstoryboardname"]; 
[self.navigationController pushViewController:View animated:YES]; 
+0

Спасибо, проработал! :) –

2

Используйте этот код в действии кнопки (Swift 3.0.1):

let vc = self.storyboard?.instantiateViewController(
    withIdentifier: "YourSecondVCIdentifier") as! SecondVC 

navigationController?.pushViewController(vc, animated: true) 
+0

@EricAya Я очень новичок в этом stackOverFlow, поэтому просто разместил то, что я увидел и применил для себя :) –

+0

@EricAya Okay sir –

0
UIViewController *vc=[self.storyboard instantiateViewControllerWithIdentifier:@"storyboardId"]; 
[self.navigationController pushViewController:vc animated:YES]; 
Смежные вопросы