Programing

프로그래밍 방식으로 View Controller를 호출하는 방법은 무엇입니까?

lottogame 2020. 11. 10. 07:42
반응형

프로그래밍 방식으로 View Controller를 호출하는 방법은 무엇입니까?


이 튜토리얼에서 찾을 수있는 모든 튜토리얼을 살펴 봤지만 아직 답이 없습니다. 코드에서 다른 뷰를 호출해야합니다. 나는 UIStoryboards. 에서 컨트롤 드래그하여 여러 번보기를 변경 UIButtons했지만 이제 코드에서 가져온 것이어야합니다. 사용자가 처음으로 앱을 열면 메인 메뉴에서 정보 페이지를 호출하려고합니다. 그러나 코드에서보기를 변경하는 방법을 찾을 수없는 것 같습니다. 내 모든 뷰는 동일한 파일 ( ViewController2 )에 의해 제어됩니다 . identifier내 주요 메뉴는 ViewControllerMain , 그리고 identifier에서 정보 페이지입니다 ViewControllerInfo . 먼저 이것을 시도했습니다.

[ViewControllerMain presentViewController: ViewControllerInfo 
                                 animated:YES 
                               completion: NULL];

그런 다음 나는 UIViewControllers각각 을 다르게 만들고 말하려고 노력했습니다 .

[ViewController2 presentViewController: ViewController 
                              animated:YES 
                            completion: NULL];

둘 다 작동하지 않았습니다. 첫 번째는 다음과 같습니다.

선언되지 않은 식별자 ViewControllerMain을 사용합니다.

두 번째에서는 다음과 같이 말합니다.

예기치 않은 인터페이스 이름 'ViewController': 예상 식별자.

어떡해?


뷰 컨트롤러를 생성하려면 :

UIViewController * vc = [[UIViewController alloc] init];

뷰 컨트롤러를 호출하려면 (다른 뷰 컨트롤러 내에서 호출해야 함) :

[self presentViewController:vc animated:YES completion:nil];

하나의 경우 null 대신 nil을 사용하십시오.


스토리 보드에서 뷰 컨트롤러로드 :

NSString * storyboardName = @"MainStoryboard"; 
UIStoryboard *storyboard = [UIStoryboard storyboardWithName:storyboardName bundle: nil];
UIViewController * vc = [storyboard instantiateViewControllerWithIdentifier:@"IDENTIFIER_OF_YOUR_VIEWCONTROLLER"];
[self presentViewController:vc animated:YES completion:nil];

Identifier 보기 컨트롤러의 이름은보기 컨트롤러의 클래스 이름 또는 스토리 보드의 ID 검사기에서 할당 할 수있는 스토리 보드 ID와 같습니다.


스토리 보드에서 뷰 컨트롤러를 인스턴스화 한 다음 표시해야합니다.

ViewControllerInfo* infoController = [self.storyboard instantiateViewControllerWithIdentifier:@"ViewControllerInfo"];
[self.navigationController pushViewController:infoController animated:YES];

이 예에서는 이전보기로 돌아 가기 위해 탐색 컨트롤러가 있다고 가정합니다. 물론 presentViewController : animated : completion :을 사용할 수도 있습니다. 요점은 스토리 보드가 대상 뷰 컨트롤러의 ID를 사용하여 대상 뷰 컨트롤러를 인스턴스화하도록하는 것입니다.


빠른

이것은 스토리 보드에서 뷰 컨트롤러를 가져와 보여줍니다.

let storyboard = UIStoryboard(name: "Main", bundle: nil)
let secondViewController = storyboard.instantiateViewController(withIdentifier: "secondViewControllerId") as! SecondViewController
self.present(secondViewController, animated: true, completion: nil)

스토리 보드 이름,보기 컨트롤러 이름 및보기 컨트롤러 ID를 적절하게 변경합니다.


이 방법으로 ViewController를 호출 할 수 있습니다.

여기에 이미지 설명 입력

1. 현재 화면에서 : 새 화면 불러 오기

VerifyExpViewController *addProjectViewController = [[VerifyExpViewController alloc] init];
[self.navigationController pushViewController:addProjectViewController animated:YES];

2.1로드 된보기에서 : .h 파일에 아래 추가

@interface VerifyExpViewController : UIViewController <UINavigationControllerDelegate>

2.2로드 된보기에서 : .m 파일에 아래 추가

  @implementation VerifyExpViewController

- (void)viewDidLoad
{
    [super viewDidLoad];

    self.navigationController.delegate = self;
    [self setNavigationBar];
}
-(void)setNavigationBar
{
    self.navigationController.navigationBar.backgroundColor = [UIColor clearColor];
    self.navigationController.navigationBar.translucent = YES;
    [self.navigationController.navigationBar setBackgroundImage:[UIImage imageNamed:@"B_topbar.png"] forBarMetrics:UIBarMetricsDefault];
    self.navigationController.navigationBar.titleTextAttributes = @{NSForegroundColorAttributeName: [UIColor whiteColor]};
    self.navigationItem.hidesBackButton = YES;
    self.navigationItem.leftBarButtonItem = [[UIBarButtonItem alloc] initWithImage:[UIImage imageNamed:@"Btn_topback.png"] style:UIBarButtonItemStylePlain target:self action:@selector(onBackButtonTap:)];
    self.navigationItem.leftBarButtonItem.tintColor = [UIColor lightGrayColor];
    self.navigationItem.rightBarButtonItem = [[UIBarButtonItem alloc] initWithImage:[UIImage imageNamed:@"Save.png"] style:UIBarButtonItemStylePlain target:self action:@selector(onSaveButtonTap:)];
    self.navigationItem.rightBarButtonItem.tintColor = [UIColor lightGrayColor];
}

-(void)onBackButtonTap:(id)sender
{
    [self.navigationController popViewControllerAnimated:YES];
}
-(IBAction)onSaveButtonTap:(id)sender
{
    //todo for save button
}

@end

이것이 누군가에게 유용하기를 바랍니다 :)


이를 수행 할 수있는 두 가지 방법이 있습니다.

1, 내 대답에 설명 된대로 Storyboard에서 ViewController에 대한 segue를 만듭니다 .iOS 5에서 사용자 입력과 관련이없는 segue를 수행하는 방법은 무엇입니까?

2, ViewController와 식별자를 제공하고 여기 내 대답의 코드를 사용하여 호출하십시오. 스토리 보드 장면을 프로그래밍 방식으로 호출 하십시오 (세그가 필요하지 않음)?


이것의 주된 논리는

NSString * storyboardIdentifier = @"SecondStoryBoard";

UIStoryboard *storyboard = [UIStoryboard storyboardWithName:storyboardIdentifier bundle: nil];

UIViewController * UIVC = [storyboard instantiateViewControllerWithIdentifier:@"YourviewControllerIdentifer"];

[self presentViewController:UIVC animated:YES completion:nil];

표시하려는 뷰 컨트롤러 클래스를 가져오고 다음 코드를 사용하십시오.

KartViewController *viewKart = [[KartViewController alloc]initWithNibName:@"KartViewController" bundle:nil];
[self presentViewController:viewKart animated:YES completion:nil];

        UIStoryboard* storyboard = [UIStoryboard storyboardWithName:@"MainStoryboard_iPhone_iOS7" bundle:nil];
            AccountViewController * controller = [storyboard instantiateViewControllerWithIdentifier:@"accountView"];
            //            [self presentViewController:controller animated:YES completion:nil];

        UIViewController *topRootViewController = [UIApplication sharedApplication].keyWindow.rootViewController;
        while (topRootViewController.presentedViewController)
        {
            topRootViewController = topRootViewController.presentedViewController;
        }

        [topRootViewController presentViewController:controller animated:YES completion:nil];

참고 URL : https://stackoverflow.com/questions/16134361/how-to-call-a-view-controller-programmatically

반응형