2017-08-09 15 views
-2

"HomeController"という名前の私の最初のViewControllerから "CalendarController"という別のView Controllerに移動したいと思います。私は "CalendarButton"と呼ばれるボタンを使用してこれを行いたいと思います。私はまた、ストーリーボードへの言及なしでこれをしたいと思います。おかげボタンを使用して1つのViewControllerから別のViewControllerにナビゲートする方法。 Swift 3(No StoryBoard)

エラーは言う:私はあなたのコードを見てきたようにプッシュは、ナビゲーションコントローラを使用すると、ナビゲーションコントローラを埋め込まれていない

import UIKit 
class HomeController: UICollectionViewController,UICollectionViewDelegateFlowLayout { 

    private let cellId = "cellId" 

    override func viewDidLoad() { 
     super.viewDidLoad() 

    collectionView?.backgroundColor = UIColor.rgb(31, green: 194, blue: 31) 
    collectionView!.isScrollEnabled = false 
    collectionView? .register(MenuCell.self, forCellWithReuseIdentifier: cellId) 
    } 

    override func collectionView(_ collectionView: UICollectionView, cellForItemAt indexPath: IndexPath) -> UICollectionViewCell{ 
     let cell = collectionView.dequeueReusableCell(withReuseIdentifier: cellId, for:indexPath) as! MenuCell 
     cell.calendarButton.addTarget(self, action: #selector(calendar), for: .touchUpInside) 
    return cell 
    } 

    func calendar() { 
     let objVC: CalendarController! = CalendarController() 
     let aObjNavi = UINavigationController(rootViewController: objVC!) 
     self.navigationController?.pushViewController(aObjNavi, animated: true) 

    } 

    override func collectionView(_ collectionView: UICollectionView, numberOfItemsInSection section: Int) ->Int { 
    return 1 

    } 

    func collectionView(_ collectionView: UICollectionView, layout collectionViewLayout: UICollectionViewLayout, sizeForItemAt indexPath: IndexPath) -> CGSize { 
    return CGSize(width: view.frame.width, height: view.frame.height) 

    } 

    func collectionView(_ collectionView: UICollectionView, layout collectionViewLayout: UICollectionViewLayout, minimumLineSpacingForSectionAt section: Int) -> CGFloat { 
    return 0 
    } 

} 

//別の迅速なファイル

class BaseCell: UICollectionViewCell{ 
    override init(frame: CGRect) { 
    super.init(frame: frame) 
    setupViews() 
    } 
    func setupViews() { 

    } 
    required init?(coder aDecoder: NSCoder) { 
    fatalError("init(coder:) has not been implemented") 
    } 

} 
    class MenuCell: BaseCell{ 

    lazy var calendarButton: UIButton = { 
    let button = UIButton(type: .system) 
    button.setTitle("Calender", for: .normal) 
    button.setTitleColor(UIColor(red: 0, green: 0, blue: 0, alpha: 1), for: .normal) 
    button.backgroundColor = .white 
    button.titleLabel!.font = UIFont.systemFont(ofSize: 20) 
    button.layer.cornerRadius = 15 
    return button 
}() 

    func calendar() { 
    let newViewController = CalendarController() 
    self.navigationController?.pushViewController(newViewController, animated: true) 
} 
+0

アプリケーションデリゲートはビューコントローラではありません – matt

+0

次のようなコードを表示してください:class HomeController ... –

+0

この編集の役に立ちます –

答えて

0

をサポートしていません。 プッシュはスタック内で動作します。したがって、コード内にプログラムでナビゲーションコントローラを組み込む必要があります。

このリンクは、より良いあなたを助けることができます。 Embedding navigation controller

+0

私のコードを更新しましたが、現在、「ナビゲーションコントローラを押してもサポートされていません」というエラーが表示されます。私が初心者だと助けてください –

1

セルは、ナビゲーションコントローラを持っていません。表示コントローラにはナビゲーションコントローラしかありません。

あなたは

func calendar() { 
    let newViewController = CalendarController() 
    self.navigationController?.pushViewController(newViewController, animated: true) 
} 

にアクセスしたい場合は、その後にHomeController

で、このようないくつかのコードを変更し、あなたにHomeControllerがNavigationController

または使用することができますに埋め込まれていることを確認しますアクセスする代理人func Calender(){...}

+0

私はHomeControllerを変更しましたが、エラーメッセージが表示されていることを知っています。ナビゲーションコントローラを押してもサポートされていません。私は次に何をする必要がありますか? –

+0

HomeControllerをインスタンス化するときは、** NavigationViewController **に埋め込む必要があります。 –

関連する問題