user7222919
user7222919

Reputation: 149

Overriding non-open instance swift for a custom made view controller

I have a custom made view controller and I'm trying to add functions for a UIviewControllerTransitioningDelegate on a custom view controller, and I'm having trouble. Here is the code. I'm getting an "overriding non-open instance method outside of its dining module error" at "open override func animationController(forPresented" and "open override func animationController(forDismissed". Heres an image of the error.

Error Image

import UIKit
import ColorMatchTabs

class MainPageViewController: ColorMatchTabsViewController {

    @IBOutlet weak var ShoppingCart: TKTransitionSubmitButton!
    @IBOutlet weak var Settings: TKTransitionSubmitButton!

    override func viewDidLoad() {
        super.viewDidLoad()

        titleLabel.font = UIFont.navigationTitleFont()
        // to hide bottom button remove the following line
        popoverViewController = MainPopOverViewController()
        popoverViewController?.delegate = self

        dataSource = self
        reloadData()
    }

    @IBAction func SettingsButton(_ button: TKTransitionSubmitButton) {
        button.animate(0, completion: { () -> () in
            let secondVC = SettingsViewController()
            secondVC.transitioningDelegate = self
            self.present(secondVC, animated: true, completion: nil)
        })
    }

    @IBAction func ShoppingCartButton(_ button: TKTransitionSubmitButton) {
        button.animate(0, completion: { () -> () in

        })
    }

    open override func animationController(forPresented presented: UIViewController, presenting: UIViewController, source: UIViewController) -> UIViewControllerAnimatedTransitioning? {
        return TKFadeInAnimator(transitionDuration: 0.5, startingAlpha: 0.8)
    }

    open override func animationController(forDismissed dismissed: UIViewController) -> UIViewControllerAnimatedTransitioning? {
        return nil
    }

}

extension MainPageViewController: ColorMatchTabsViewControllerDataSource {

    func numberOfItems(inController controller: ColorMatchTabsViewController) -> Int {
        return TabItemsProvider.items.count
    }

    func tabsViewController(_ controller: ColorMatchTabsViewController, viewControllerAt index: Int) -> UIViewController {
        return StubContentViewControllersProvider.viewControllers[index]
    }

    func tabsViewController(_ controller: ColorMatchTabsViewController, titleAt index: Int) -> String {
        return TabItemsProvider.items[index].title
    }

    func tabsViewController(_ controller: ColorMatchTabsViewController, iconAt index: Int) -> UIImage {
        return TabItemsProvider.items[index].normalImage
    }

    func tabsViewController(_ controller: ColorMatchTabsViewController, hightlightedIconAt index: Int) -> UIImage {
        return TabItemsProvider.items[index].highlightedImage
    }

    func tabsViewController(_ controller: ColorMatchTabsViewController, tintColorAt index: Int) -> UIColor {
        return TabItemsProvider.items[index].tintColor
    }

}

extension MainPageViewController: PopoverViewControllerDelegate {

    func popoverViewController(_ popoverViewController: PopoverViewController, didSelectItemAt index: Int) {
        selectItem(at: index)
    }
}

Upvotes: 0

Views: 5321

Answers (1)

Sahil
Sahil

Reputation: 9226

Define ColorMatchTabsViewController methods with open. A open class will be both usable and subclassable. Similarly, a public member will only be usable by other modules, but not overridable. An open member will be both usable and overridable.

so define animationController and animationController open in ColorMatchTabsViewController extension. Default they defined as public.

Upvotes: 3

Related Questions