2017-01-24 3 views
3

私は2つのビューコントローラoneVC.swiftとtwoVC.swiftを持っています。 twoVC.swiftの背景色を透明にして、oneVC.swiftにtwoVC.swiftをオーバーレイとして表示したいとします。添付ファイルを参照してください。背景色が「クリア」の新しいView Controllerをプッシュ

oneVC.swift twoVC.swift

私は次のコードでしようとしています:

let storyboard = UIStoryboard(name: "Main", bundle: nil) 
let homeVC = storyboard.instantiateViewController(withIdentifier: "twoVC") as! twoVC  
homeVC.providesPresentationContextTransitionStyle = true; 
homeVC.definesPresentationContext = true; 
homeVC.modalPresentationStyle = .overCurrentContext 
self.navigationController!.present(homeVC, animated: false, completion: nil) 

このコードは完璧に機能していますが、現在のコードの問題は、私はさらにtwoVCからの新しいコントローラをプッシュすることができないということです。これは1VC.swiftで表示されるため、迅速です。 そして、私はこのような

pushViewController

を使用する場合:私はtwoVC.swiftの透明性を達成することはできませんよ、これを使用して

self.navigationController?.pushViewController(homeVC, animated: false) 

。 だから

を使用して透明性を有する第一のビューコントローラ上に第2のビューコントローラをプッシュすることができる任意の可能性は、予め

おかげpushViewController

あります。

+0

「UIView」を使用してoneVC上にオーバーレイすることを検討しましたか?独立した '.xib'を作り、それをあなたが望むようにデザインしてから、' UIView.transition'メソッドを使って 'UIViewController'のプッシュアニメーション効果をシミュレートすることができます。 VCをオーバーレイすることは、一般にあなたが何を達成するかではありません。 – ThunderStruct

+0

委任を使用して、oneVCにユーザーが2VCで何かをしたことを通知します。 – Andrea

+0

あなたは2VCの前に1つのナビゲーションコントローラを取って、2VCに接続し、それにストーリーボード識別子を与え、通常のコードに従ってナビゲーションコントローラを提示する必要があります。そのナビゲーションコントローラから、他のビューコントローラにプッシュできるようになりました。 –

答えて

0

私の最初のViewControllerPeopleViewControllerであり、次の1つはPopUpViewControllerであり、またチェック画像です。私のコードは客観的なCで、あなたは迅速に変換することができます。 check image

-(void)tableView:(UITableView *)tableView didSelectRowAtIndexPath:(NSIndexPath *)indexPath 
    { 

     PopUpViewController * popUp = [self.storyboard instantiateViewControllerWithIdentifier:@"PopUpViewController"]; 

     popUp.nav=self.navigationController; 

     [PeopleViewController setPresentationStyleForSelfController:self presentingController:popUp]; 

     [self presentViewController:popUp animated:YES completion:nil]; 
    } 

+ (void)setPresentationStyleForSelfController:(UIViewController *)selfController presentingController:(UIViewController *)presentingController 
    { 
      presentingController.providesPresentationContextTransitionStyle = YES; 
      presentingController.definesPresentationContext = YES; 

      [presentingController setModalPresentationStyle:UIModalPresentationOverCurrentContext]; 
    } 
+0

しかし、この手法には欠点があります。 –

0

問題は

self.navigationController!.present(homeVC, animated: false, completion: nil)です。

これは、ナビゲーションコントローラにhomeVCを表示していることを意味します。ビューコントローラを提示しても、ナビゲーションスタックには追加されません。したがって、これを修正するには、プレゼンテーションではなく、homeVCをプッシュする必要があります。

+0

これを行うと、以下のものを透明にすることは絶対に不可能です。 – Fattie