2017-10-28 1 views
0

私は、ストーリーボード/ xibsなしでアプリケーションを開発しています。私はUICollectionView(広告の)ユーザーがセルをタップして新しいビューコントローラーに移動し、その広告の詳細を表示できるようにしています。以下は、私が持っているエラーのgifです。ストーリーボード/ xibsを使用しないView Controller間の移動

enter image description here

あなたが見ることができるように、私はセルをタップ周りの後にスティックのUICollectionView種類。私は私のAdsViewControllerサブクラスでadDetailsViewController性質を持っている、と私はセルをタップすると、このコードが実行される:完全性については

class AdDetailsViewController: UIViewController { 

    var adTitle: String? 

    override func viewDidLoad() { 
     super.viewDidLoad() 

     let label = UILabel(frame: view.bounds) 
     label.textAlignment = .center 
     label.center = view.center 
     label.text = adTitle 

     view.addSubview(label) 
    } 
} 

:以下

adDetailsViewController.adTitle = adTitles[indexPath.row] 
navigationController?.pushViewController(adDetailsViewController, animated: true) 

は、ライフサイクル(現在はちょうど viewDidLoadadDetailsViewControllerの方法です残りの部分は AdsViewControllerです。

class AdsViewController: UIViewController { 

    lazy var collectionView: AdsCollectionView = { 
     let collectionView = AdsCollectionView(frame: view.frame, collectionViewLayout: TiledFlowLayout()) 
     collectionView.delegate = self 
     collectionView.dataSource = self 
     collectionView.register(AdCollectionViewCell.self, forCellWithReuseIdentifier: "AdCell") 
     view.addSubview(collectionView) 
     return collectionView 
    }() 

    let adDetailsViewController = AdDetailsViewController() 

    let adTitles = ["1", "2", "3", "4", "5", "6"] 

    override func viewDidLoad() { 
     super.viewDidLoad() 
     // Do any additional setup after loading the view, typically from a nib. 

     collectionView.translatesAutoresizingMaskIntoConstraints = false 
     collectionView.topAnchor.constraint(equalTo: view.topAnchor, constant: 8).isActive = true 
     collectionView.leadingAnchor.constraint(equalTo: view.leadingAnchor, constant: 0).isActive = true 
     collectionView.bottomAnchor.constraint(equalTo: view.bottomAnchor, constant: 0).isActive = true 
     collectionView.trailingAnchor.constraint(equalTo: view.trailingAnchor, constant: 0).isActive = true 

     view.backgroundColor = .white 
    } 
} 

extension AdsViewController: UICollectionViewDataSource { 
    func collectionView(_ collectionView: UICollectionView, numberOfItemsInSection section: Int) -> Int { 
     return adTitles.count 
    } 

    func collectionView(_ collectionView: UICollectionView, cellForItemAt indexPath: IndexPath) -> UICollectionViewCell { 
     let cell = collectionView.dequeueReusableCell(withReuseIdentifier: "AdCell", for: indexPath) as! AdCollectionViewCell 

     cell.textLabel.text = adTitles[indexPath.row] 

     return cell 
    } 
} 

extension AdsViewController: UICollectionViewDelegate { 
    func collectionView(_ collectionView: UICollectionView, didSelectItemAt indexPath: IndexPath) { 
     adDetailsViewController.adTitle = adTitles[indexPath.row] 
     navigationController?.pushViewController(adDetailsViewController, animated: true) 
    } 
} 

extension AdsViewController: UICollectionViewDelegateFlowLayout { 
    func collectionView(_ collectionView: UICollectionView, layout collectionViewLayout: UICollectionViewLayout, sizeForItemAt indexPath: IndexPath) -> CGSize { 
     return CGSize(width: (self.view.frame.size.width/2) - 10, height: self.view.frame.size.height/4) 
    } 

    func collectionView(_ collectionView: UICollectionView, layout collectionViewLayout: UICollectionViewLayout, insetForSectionAt section: Int) -> UIEdgeInsets { 
     return UIEdgeInsets(top: 0, left: 5, bottom: 0, right: 5) 
    } 
} 
+0

これは、あなたが 'ViewControllers'の変更をアニメーション化しているために起こります。 'animated:'パラメータを 'false'に設定した場合、達成したいと思えば、変更は瞬時になります。 –

+0

セルをタップするときに通常の遷移が起こるようにします。つまり、新しいビューコントローラがその上をスライドします。私はそれが即座に起こることを望んでいません。 – eirikvaa

+0

UIViewControllerのライフサイクルメソッドadDetailsViewControllerを追加してください – Sander

答えて

0

あなたのコードをもっと共有する必要があります。特別な設定はありますか?透明な背景のように?あなたはviewDidLoadで何をしていますか? viewWillAppear、viewDidAppearなどを上書きし、サブクラス関数(super.viewWillAppear(animated)など)を呼び出していませんか?それは非常に一般的な間違いです...

+0

私はAdsViewController'と 'AdDetailsViewController'のコードを追加しました。 – eirikvaa

0

[OK]を修正しました。 backgroundColorAdDetailsViewControllerに設定してUIColor.whiteに設定すると、期待どおりに遷移しているようです。

関連する問題