프로그래밍 방식으로 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
'Programing' 카테고리의 다른 글
Watchkit AppIcon- "AppIcon"이라는 앱 아이콘 세트에 적용 가능한 콘텐츠가 없습니다. (0) | 2020.11.10 |
---|---|
Swift Decodable 프로토콜로 중첩 된 JSON 구조체를 디코딩하는 방법은 무엇입니까? (0) | 2020.11.10 |
선택 후 작업 트리거 select2 (0) | 2020.11.10 |
사용자 입력에서 정수 읽기 (0) | 2020.11.10 |
Visual Studio에서 AddJsonFile () 메서드가 정의되지 않았다고 알려주는 이유는 무엇입니까? (0) | 2020.11.10 |