2016-09-13 4 views
6

У меня есть контроллер сплит-представлением, и когда пользователь щелкает ячейку в представлении таблицы, приложение отображает контроллер просмотра с представлением контейнера и элемент управления сегментом для переключения между двумя диспетчерами просмотра детей.Невозможно переупорядочить ячейки коллекции View

Первый контроллер детского вида - это контроллер просмотра коллекции. В каждой ячейке Collection View есть слово.

мнение выглядит следующим образом:

view screen

добавить контроллер представления ребенка программно с помощью этого кода (от Detail View Controller, контейнер подвиды):

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)) 
} 

Здесь представляет собой код для переключения между двумя видами детей с сегментированным управлением:

@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) 
} 

Чтобы иметь возможность изменять порядок клетки I внедрил этот метод для моего пользовательского класса CollectionViewController:

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() 
} 

Проблема заключается в том, что, когда я нажимаю Table Vi Ce и приложение показывает Container View с Collection View Controller я не могу изменить порядок ячеек, и, чтобы это сделать, мне нужно изменить Child (с помощью Segmented Control), а затем вернуться к представлению коллекции.

Как я могу решить эту проблему?

+0

Извини, если я сделал некоторые ошибки с языком, я итальянским – ale00

+0

Что вы делаете на вашем Tableview -didSelect? – Aks

+0

Я ничего не делаю на tableView-didSelect @Aks – ale00

ответ

0

Я хотел бы проверить две вещи:

Во-первых, вы называете willMoveToParentViewController в методе cycle(from: UIViewController, to: UIViewController), но не в viewDidLoad, пытаются сделать это. Из того, что я могу прочитать, вы должны иметь возможность позвонить cycle в свой метод viewDidLoad, вызов метода на Nil -объект (from) ничего не делает.

Во-вторых, проверьте, установлены ли ваши WordCollectionViewController collectionView delegate и dataSource, когда он загружается в первый раз. Это может быть сложно иногда при загрузке с StoryBoard, если элементы не инициализируются во времени.

+0

Спасибо, я внедрил эти изменения, но ничего не изменилось – ale00

Смежные вопросы