2016-09-13 8 views
6

スプリットビューコントローラがあり、ユーザーがテーブルビューでセルをクリックすると、2つの子ビューコントローラを切り替えるコンテナビューとセグメントコントロールを持つビューコントローラが表示されます。コレクションビューのセルを並べ替えることができません

最初の子ビューコントローラは、コレクションビューコントローラです。コレクションビューの各セルには単語があります。

ビューは次のようになります。ここでは

override func viewDidLoad() { 


    self.currentViewController = self.storyboard?.instantiateViewController(withIdentifier: "WordCollectionViewControllerID") 
    (self.currentViewController as! WordCollectionViewController).text = self.text 
    self.currentViewController?.view.translatesAutoresizingMaskIntoConstraints = false 
    self.addChildViewController(self.currentViewController!) 
    self.addSubview(subView: self.currentViewController!.view, toView: self.textContainerView) 
    self.currentViewController?.view.layoutIfNeeded() 
    self.currentViewController?.didMove(toParentViewController: self) 

    super.viewDidLoad() 

} 

func addSubview(subView: UIView, toView parentView: UIView) { 
    parentView.addSubview(subView) 

    var viewBindingsDict = [String: AnyObject]() 
    viewBindingsDict["subView"] = subView 
    parentView.addConstraints(NSLayoutConstraint.constraints(withVisualFormat: "H:|[subView]|", options: [], metrics: nil, views: viewBindingsDict)) 
    parentView.addConstraints(NSLayoutConstraint.constraints(withVisualFormat: "V:|[subView]|", options: [], metrics: nil, views: viewBindingsDict)) 
} 

view screen

は、私が(詳細ビューコントローラ、サブビューのコンテナから)このコードでプログラムで子ビューコントローラを追加しますセグメント化されたコントロールを持つ2つの子ビュー間の切り替えのコードです:

@IBAction func changeChildViewController(_ sender: UISegmentedControl) { 
    if sender.selectedSegmentIndex == 0 { 
     let newViewController = self.storyboard?.instantiateViewController(withIdentifier: "WordCollectionViewControllerID") 
     (newViewController as! WordCollectionViewController).text = self.text 
     newViewController!.view.translatesAutoresizingMaskIntoConstraints = false 
     cycle(from: self.currentViewController!, to: newViewController!) 
     self.currentViewController = newViewController 
     print("Reorder") 
    } else { 
     let newViewController = self.storyboard?.instantiateViewController(withIdentifier: "NavigationControllerEditTextViewControllerID") 
     (newViewController?.childViewControllers[0] as! EditTextViewController).text = self.text 
     newViewController!.view.translatesAutoresizingMaskIntoConstraints = false 
     cycle(from: self.currentViewController!, to: newViewController!) 
     self.currentViewController = newViewController 
     print("Edit") 
    } 
} 

func cycle(from: UIViewController, to: UIViewController) { 
    from.willMove(toParentViewController: nil) 
    self.addChildViewController(to) 

    self.addSubview(subView: to.view, toView: self.textContainerView) 

    to.view.layoutIfNeeded() 

    from.view.removeFromSuperview() 

    from.removeFromParentViewController() 
    to.didMove(toParentViewController: self) 
} 
問題は、私がクリックしたときにテーブルビューセルとアプリがコレクションビューコントローラとコンテナビューを示すことである

override func collectionView(_ collectionView: UICollectionView, moveItemAt sourceIndexPath: IndexPath, to destinationIndexPath: IndexPath) { 

    // Swap values if sorce and destination 
    let change = textArray[sourceIndexPath.row] 


    textArray.remove(at: sourceIndexPath.row) 
    textArray.insert(change, at: destinationIndexPath.row) 


    // Save changes in Core Data 
    text?.reordered_text = textArray.joined(separator: " ") 

    (UIApplication.shared.delegate as! AppDelegate).saveContext() 


    collectionView.reloadData() 
} 

:私は私のカスタムCollectionViewControllerクラスの、このメソッドを実装しているセルを並べ替えることができるように

埋め込み、私は、セルを並べ替えることはできませんし、これを行うには、(セグメント化されたコントロールで)子を変更し、コレクションビューに戻る必要があります。

どうすればこの問題を解決できますか?

+0

私は言語といくつかのミスを犯してしまった場合、私はイタリアの – ale00

+0

あなたのtableView上で何をしているのです-didSelect? – Aks

+0

私は何もしていませんtableView-didSelect @Aks – ale00

答えて

0

は、これらのメソッドを実装するようにしてください:

func beginInteractiveMovementForItem(at: IndexPath) -> Bool 
func updateInteractiveMovementTargetPosition(targetPosition: CGPoint) 
func endInteractiveMovement() 
func cancelInteractiveMovement() 

あなたはこのチュートリアルに従うことができます:http://nshint.io/blog/2015/07/16/uicollectionviews-now-have-easy-reordering/申し訳

0

私は二つのことを確認します:

まず、あなたのcycle(from: UIViewController, to: UIViewController)方法でwillMoveToParentViewControllerを呼び出しますが、viewDidLoadで、これを実行しようとしません。 -object(from)でメソッドを呼び出すと、をviewDidLoadメソッドで呼び出すことができるはずです。

2回目に初めてコレクションをロードしたときにWordCollectionViewControllerコレクションビューdelegatedataSourceが正しく設定されているかどうかを確認します。要素が時間内に初期化されていない場合は、StoryBoardからロードするときに、これらは時間がかかることがあります。

+0

ありがとう、私はこれらの変更を実装しましたが、何も変わりません – ale00

関連する問題