programing

presentViewController 및 탐색 모음 표시

bestprogram 2023. 6. 1. 23:02

presentViewController 및 탐색 모음 표시

보기 컨트롤러 계층이 있고 맨 위에 있는 컨트롤러가 모달로 표시되며 사용 시 탐색 모음을 표시하는 방법을 알고 싶습니다.

'UIViewController:presentViewController:viewControllerToPresent:animated:completion'

'presentViewController:animated:completion:'의 문서는 다음과 같습니다.

아이폰과 아이팟 터치에서는 항상 전체 화면이 표시됩니다.iPad에서 프레젠테이션은 modal PresentationStyle 속성의 값에 따라 달라집니다.'

'modalPresentationStyle'의 경우 문서는 다음과 같이 말합니다.

프리젠테이션 스타일에 따라 양식으로 표시된 보기 컨트롤러가 화면에 표시되는 방식이 결정됩니다.iPhone 및 iPod touch에서는 모달 뷰 컨트롤러가 항상 전체 화면으로 표시되지만 iPad에서는 몇 가지 다른 표시 옵션이 있습니다.

뷰 컨트롤이 표시되면 상태 표시줄 아래에 탐색 모음이 표시되도록 하는 방법이 있습니까?문서를 iPhone/iPod 옵션은 없고 iPad에서만 사용할 수 있는 것으로 해석해야 합니까?

저는 는에이를 했습니다.'UIViewController:presentModalViewController:animated'잘 작동했지만, iOS 5.0 이후로 API가 더 이상 사용되지 않아 새로운 API로 전환합니다.

시각적으로, 제가 원하는 것은 예전의 API처럼 화면 아래에서 새로운 컨트롤러를 슬라이드하는 것입니다.

[코드 포함]:

// My root level view:
UIViewController *vc = [[RootViewController alloc] 
                            initWithNibName:nil 
                            bundle:[NSBundle mainBundle]];
navController = [[UINavigationController alloc] initWithRootViewController:vc];        
....

// Within the RootViewController, Second view controller is created and added 
// to the hierarchy. It is this view controller that is responsible for 
// displaying the DetailView:
SecondTierViewController *t2controller = [[SecondTierViewController alloc] 
                                           initWithNibName:nil
                                           bundle:[NSBundle mainBundle]];

[self.navigationController pushViewController:t2controller animated:YES];

// Created by SecondTierViewController 
DetailViewController *controller = [[DetailViewController alloc] initWithNibName:nil                                                                                 
                                        bundle:[NSBundle mainBundle]];  

controller.modalTransitionStyle = UIModalTransitionStyleCoverVertical;
controller.modalPresentationStyle = UIModalPresentationCurrentContext;

[self.navigationController presentViewController:controller 
                                        animated:YES 
                                        completion:nil];

iPhone에서 보기 컨트롤러를 양식적으로 표시하면 내비게이션 컨트롤러의 상단 보기 컨트롤러에 어떻게 표시하든 상관없이 항상 전체 화면으로 표시됩니다.그러나 항상 다음과 같은 해결 방법으로 탐색 모음을 표시할 수 있습니다.

원하는 뷰 컨트롤러로 설정된 루트 뷰 컨트롤러를 모델적으로 표시하는 대신 탐색 컨트롤러를 모델적으로 표시합니다.

MyViewController *myViewController = [[MyViewController alloc] initWithNibName:nil bundle:nil];
UINavigationController *navigationController = 
    [[UINavigationController alloc] initWithRootViewController:myViewController];

//now present this navigation controller modally 
[self presentViewController:navigationController
                   animated:YES
                   completion:^{

                        }];

보기가 양식으로 표시되면 탐색 모음이 표시됩니다.

Swift 5.*

탐색:

guard let myVC = self.storyboard?.instantiateViewController(withIdentifier: "MyViewController") else { return }
let navController = UINavigationController(rootViewController: myVC)

self.navigationController?.present(navController, animated: true, completion: nil)

되돌아가기:

self.dismiss(animated: true, completion: nil)

스위프트 2.0

탐색:

let myVC = self.storyboard?.instantiateViewControllerWithIdentifier("MyViewController");
let navController = UINavigationController(rootViewController: myVC!)

self.navigationController?.presentViewController(navController, animated: true, completion: nil)

되돌아가기:

self.dismissViewControllerAnimated(true, completion: nil)

사용할 수 있습니까?

[self.navigationController pushViewController:controller animated:YES];

돌아가는 중 (내 생각엔):

[self.navigationController popToRootViewControllerAnimated:YES];

IOS7에서도 같은 문제가 있었습니다.셀렉터에서 호출했는데 ios7과 ios8에서 모두 작동했습니다.

[self performSelector: @selector(showMainView) withObject: nil afterDelay: 0.0];

- (void) showMainView {
    HomeViewController * homeview = [
        [HomeViewController alloc] initWithNibName: @
        "HomeViewController"
        bundle: nil];
    UINavigationController * navcont = [
        [UINavigationController alloc] initWithRootViewController: homeview];
    navcont.navigationBar.tintColor = [UIColor whiteColor];
    navcont.navigationBar.barTintColor = App_Theme_Color;
    [navcont.navigationBar
    setTitleTextAttributes: @ {
        NSForegroundColorAttributeName: [UIColor whiteColor]
    }];
    navcont.modalPresentationStyle = UIModalPresentationFullScreen;
    navcont.modalTransitionStyle = UIModalTransitionStyleFlipHorizontal;
    [self.navigationController presentViewController: navcont animated: YES completion: ^ {

    }];
}

어 라알[self.navigationController pushViewController:controller animated:YES];에서는 전환을 애니메이션화하고 이를 탐색 컨트롤러 스택 및 기타 멋진 탐색 모음 애니메이션 항목에 추가합니다.만약 당신이 바 애니메이션에 관심이 없다면, 이 코드는 작동할 것입니다.새 컨트롤러에 막대가 나타나고 대화형 팝업 제스처가 표시됩니다!

//Make Controller
DetailViewController *controller = [[DetailViewController alloc] initWithNibName:nil                                                                                 
                                    bundle:[NSBundle mainBundle]];  
//Customize presentation
controller.modalTransitionStyle = UIModalTransitionStyleCoverVertical;
controller.modalPresentationStyle = UIModalPresentationCurrentContext;

//Present controller
[self presentViewController:controller 
                   animated:YES 
                 completion:nil];
//Add to navigation Controller
[self navigationController].viewControllers = [[self navigationController].viewControllers arrayByAddingObject:controller];
//You can't just [[self navigationController].viewControllers addObject:controller] because viewControllers are for some reason not a mutable array.

편집: 죄송합니다. presentViewController가 전체 화면을 채웁니다.CGAfineTransform.translation 등을 사용하여 사용자 지정 전환을 수행하고 전환과 함께 컨트롤러를 애니메이션화한 다음 탐색 컨트롤러의 뷰 컨트롤러에 추가해야 합니다.

스위프트 3

        let vc0 : ViewController1 = ViewController1()
        let vc2: NavigationController1 = NavigationController1(rootViewController: vc0)
        self.present(vc2, animated: true, completion: nil)

Swift version : Navigation Controller에 내장된 View Controller를 보여줍니다.

    override func viewDidAppear(animated: Bool) {
    super.viewDidAppear(animated)

    //  Identify the bundle by means of a class in that bundle.
    let storyboard = UIStoryboard(name: "Storyboard", bundle: NSBundle(forClass: SettingsViewController.self))

    // Instance of ViewController that is in the storyboard.
    let settingViewController = storyboard.instantiateViewControllerWithIdentifier("SettingsVC")

    let navController = UINavigationController(rootViewController: settingViewController)

    presentViewController(navController, animated: true, completion: nil)

}

저는 이 코드를 사용합니다.iOS 8에서 잘 작동합니다.

MyProfileEditViewController *myprofileEdit=[self.storyboard instantiateViewControllerWithIdentifier:@"myprofileeditSid"];
UINavigationController *navigationController = [[UINavigationController alloc] initWithRootViewController:myprofileEdit];
[self presentViewController:navigationController animated:YES completion:^{}];

하나의 솔루션

DetailViewController *controller = [[DetailViewController alloc] initWithNibName:nil                                                                                 
                                        bundle:[NSBundle mainBundle]];  

UINavigationController *navController = [[UINavigationController alloc] initWithRootViewController:controller];
navController.modalTransitionStyle = UIModalTransitionStyleCoverVertical;
navController.modalPresentationStyle = UIModalPresentationCurrentContext;



[self.navigationController presentViewController:navController 
                                        animated:YES 
                                        completion:nil];

UIModal Presentation FormSheet과 같이 modal PresentationStyle 속성을 설정하지 않은 경우 탐색 막대가 항상 표시됩니다.확인하기 위해 항상 수행

[[self.navigationController topViewController] presentViewController:vieController 
                                                            animated:YES 
                                                          completion:nil];

탐색 모음이 항상 표시됩니다.

Swift 2.x에서 Navigation Controller를 사용하는 경우

let storyboard = UIStoryboard(name: "Main", bundle: nil)
let targetViewController = storyboard.instantiateViewControllerWithIdentifier("targetViewControllerID") as? TargetViewController
self.navigationController?.pushViewController(targetViewController!, animated: true)

이것을 먹어보세요.

     let transition: CATransition = CATransition()
    let timeFunc : CAMediaTimingFunction = CAMediaTimingFunction(name: kCAMediaTimingFunctionEaseInEaseOut)
    transition.duration = 1
    transition.timingFunction = timeFunc
    transition.type = kCATransitionPush
    transition.subtype = kCATransitionFromRight
    self.view.window!.layer.addAnimation(transition, forKey: kCATransition)
    self.presentViewController(vc, animated:true, completion:nil)

언급URL : https://stackoverflow.com/questions/9724194/presentviewcontroller-and-displaying-navigation-bar