Как мне вызвать эту функцию переопределения из другого файла - PullRequest
0 голосов
/ 15 октября 2019

Я пытаюсь вызвать функцию из другого файла. Другой файл имеет нужную мне функцию, и swift не поддерживает множественное наследование.

Я пытался объединить этот файл -

import XLPagerTabStrip
//Delete UIViewController, and Extend //ButtonBarPagerTabStripViewController instead
class ParentViewController: ButtonBarPagerTabStripViewController {
    let purpleInspireColor = UIColor(red:0.13, green:0.03, blue:0.25, alpha:1.0)
    override func viewDidLoad() {
          super.viewDidLoad()

    // change selected bar color
    settings.style.buttonBarBackgroundColor = .white
    settings.style.buttonBarItemBackgroundColor = .white
    settings.style.selectedBarBackgroundColor = purpleInspireColor
    settings.style.buttonBarItemFont = .boldSystemFont(ofSize: 14)
    settings.style.selectedBarHeight = 2.0
    settings.style.buttonBarMinimumLineSpacing = 0
    settings.style.buttonBarItemTitleColor = .black
    settings.style.buttonBarItemsShouldFillAvailiableWidth = true
    settings.style.buttonBarLeftContentInset = 0
    settings.style.buttonBarRightContentInset = 0
    changeCurrentIndexProgressive = { [weak self] (oldCell: ButtonBarViewCell?, newCell: ButtonBarViewCell?, progressPercentage: CGFloat, changeCurrentIndex: Bool, animated: Bool) -> Void in
    guard changeCurrentIndex == true else { return }
    oldCell?.label.textColor = .black
    newCell?.label.textColor = self?.purpleInspireColor
    }
    }

    override func viewControllers(for pagerTabStripController: PagerTabStripViewController) -> [UIViewController] {
    let child_1 = UIStoryboard(name: "Main", bundle: nil).instantiateViewController(withIdentifier: "Phone")
    let child_2 = UIStoryboard(name: "Main", bundle: nil).instantiateViewController(withIdentifier: "Email")
    return [child_1, child_2]
    }
}

с этим файлом -


import Foundation
import UIKit

class SignupViewController : UIViewController {
    override func viewDidLoad() {
        super.viewDidLoad()
    }
    @IBAction func loginTapped(_ sender: Any) {
           let loginViewController = storyboard?.instantiateViewController(withIdentifier: "LoginViewController") as! LoginViewController
           present(loginViewController,animated: true, completion: nil)
       }
    override func viewControllers(for pagerTabStripController: PagerTabStripViewController) -> [UIViewController] {
    let child_1 = UIStoryboard(name: "Main", bundle: nil).instantiateViewController(withIdentifier: "Phone")
    let child_2 = UIStoryboard(name: "Main", bundle: nil).instantiateViewController(withIdentifier: "Email")
    return [child_1, child_2]
    }
}

Однако они наследуются от двух разных базовых классов, поэтому пока ничего не работает.

Я думал поместить оба класса в отдельные файлы и вызывать функции из класса в файле, который мне нужно использовать, однако у меняпроблема с аргументами при вызове этой конкретной функции.

    override func viewControllers(for pagerTabStripController: PagerTabStripViewController) -> [UIViewController] {
    let child_1 = UIStoryboard(name: "Main", bundle: nil).instantiateViewController(withIdentifier: "Phone")
    let child_2 = UIStoryboard(name: "Main", bundle: nil).instantiateViewController(withIdentifier: "Email")
    return [child_1, child_2]
    }

1 Ответ

0 голосов
/ 15 октября 2019

Вы можете просто создать некоторую глобальную функцию (вне любого класса) с общим кодом, и, насколько я вижу, вам не нужны никакие параметры

func instantiatePhoneAndMailViewControllers() -> [UIViewController] {
    return [UIStoryboard(name: "Main", bundle: nil).instantiateViewController(withIdentifier: "Phone"), 
            UIStoryboard(name: "Main", bundle: nil).instantiateViewController(withIdentifier: "Email")]
}

и вызывать ее из viewControllers(for:) и т. д. Например

override func viewControllers(for pagerTabStripController: PagerTabStripViewController) -> [UIViewController] {
    return instantiatePhoneAndMailViewControllers()
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...