Есть ли способ, которым я могу определить .storyboard, связанный с viewController? - PullRequest
0 голосов
/ 25 сентября 2019

В storyboard можно найти id соответствующего viewController.Но из того, что я могу сказать, наоборот невозможно: то есть, в viewController я могу увидеть, к чему storyboard он подключен?

Дело в том, что я сейчас работаюс viewController, но не имею ни малейшего понятия, с чем storyboard оно связано.

Вот код с предложением от Шрирам-Бхата:

import UIKit

protocol PickNumberVieDelegate: class {
    func dismissPickNumberView(tempDef:String, tempAlter:String)
}

class PickNumberViewController: UIViewController,UITableViewDataSource, UITableViewDelegate{

    weak var delegate: PickNumberVieDelegate?
    var whatTypOfNumber = 0
    @IBOutlet weak var tableview: UITableView!
    @IBOutlet weak var indicator: UIActivityIndicatorView!

    var arr = [PresentationNumberOption]()

    var tempAlernatNr = ""
    var tempDefaultNr = ""

    override func viewDidLoad() {
        super.viewDidLoad()

        //HERE
        var storyboard: UIStoryboard? { get }
        print("?here", storyboard);

        self.setUserInterfaceStyleLight()
        if (whatTypOfNumber == 0) {

            self.title = NSLocalizedString("TimeControlled AfterWork Time" , comment: "")

        }else if (whatTypOfNumber == 1){
            self.title = NSLocalizedString("TimeControlled Showing Number" , comment: "")
        }else{

            self.title = NSLocalizedString("Display Number", comment: "")
        }

    }

    override func viewWillAppear(_ animated: Bool) {
        super.viewWillAppear(animated)

        var mobilNumber = ""
        if  let mobileNumberForThisDevice = CurrentPerson.shared().thisMobilePhone(){

            mobilNumber = mobileNumberForThisDevice.address
        };
        Communication.sendGetCustomPresentationNumberOptionsforNumber(mobilNumber, withCallbackMethod: #selector(self.gotPresentationNumberOptions(_:)), callbackFailMethod: #selector(self.failedToGetNumber), on: self)

    }

    override func didReceiveMemoryWarning() {
        super.didReceiveMemoryWarning()
        // Dispose of any resources that can be recreated.
    }

    func tableView(_ tableView: UITableView, numberOfRowsInSection section: Int) -> Int {
        return arr.count
    }

    func tableView(_ tableView: UITableView, cellForRowAt indexPath: IndexPath) -> UITableViewCell {
        let CellIdentifier = "CellId"
        var cell = tableView.dequeueReusableCell(withIdentifier: CellIdentifier)

        if cell == nil {
            cell = UITableViewCell(style: .default, reuseIdentifier: CellIdentifier)
        }

        var option: PresentationNumberOption?

        option = arr[indexPath.row]
        var str = option?.displayText()
        str = str?.replacingOccurrences(of: "[", with: "")
        str = str?.replacingOccurrences(of: "]", with: "")
        cell?.textLabel?.text = str

        if( whatTypOfNumber == 0){
            if (ModelManager.shared()?.tcsm.defaultNr == option?.address) {

                cell?.accessoryType = .checkmark

            } else {
                cell?.accessoryType = .none
            }
        }else{
            if (ModelManager.shared()?.tcsm.alternateNr == option?.address) {

                cell?.accessoryType = .checkmark
            } else {
                cell?.accessoryType = .none
            }
        }

        return cell!
    }

    func tableView(_ tableView: UITableView, didSelectRowAt indexPath: IndexPath) {

        tempAlernatNr = (ModelManager.shared()?.tcsm.alternateNr)!
        tempDefaultNr = (ModelManager.shared()?.tcsm.defaultNr)!

        let presentationNumber: PresentationNumberOption?
        presentationNumber = arr[indexPath.row]

        if( whatTypOfNumber == 0){
            if(presentationNumber?.address == ""){
                if presentationNumber?.type == kPresentationNumberOptionTypeMobileNumber{

                    self.showVerificationScreen()
                }else{

                    ModelManager.shared()?.tcsm.defaultNr = presentationNumber?.address ?? ""
                    delegate?.dismissPickNumberView(tempDef: tempDefaultNr, tempAlter: tempAlernatNr)
                    self.navigationController?.popViewController(animated: true)
                }

            }else{
                ModelManager.shared()?.tcsm.defaultNr = presentationNumber?.address ?? ""
                delegate?.dismissPickNumberView(tempDef: tempDefaultNr, tempAlter: tempAlernatNr)
                self.navigationController?.popViewController(animated: true)
            }
        }else{
            if(presentationNumber?.address == ""){
                if presentationNumber?.type == kPresentationNumberOptionTypeMobileNumber{

                    self.showVerificationScreen()
                }else{

                    ModelManager.shared()?.tcsm.alternateNr = presentationNumber?.address ?? ""
                    delegate?.dismissPickNumberView(tempDef: tempDefaultNr, tempAlter: tempAlernatNr)
                    self.navigationController?.popViewController(animated: true)
                }

            }else{
                ModelManager.shared()?.tcsm.alternateNr = presentationNumber?.address ?? ""
                delegate?.dismissPickNumberView(tempDef: tempDefaultNr, tempAlter: tempAlernatNr)
                self.navigationController?.popViewController(animated: true)
            }
        }


    }

    @objc func gotPresentationNumberOptions(_ presentationNumbers: [Any]?) {
        if let aNumbers = presentationNumbers {
            self.arr = aNumbers as! [PresentationNumberOption]
        }

        indicator.stopAnimating()

        tableview.reloadData()
    }

    @objc func failedToGetNumber() {
        //ALog("Failed to get presentation number options:%@", error)
        indicator.stopAnimating()
    }

    func numberOfSections(in tableView: UITableView) -> Int {
        // Return the number of sections.
        return 1
    }

    func showVerificationScreen() {
        print("?Show Verification Screen");

        let nextController = NumberVerificationViewController(nibName: "NumberVerificationViewController", bundle: Bundle.main)

        navigationController?.pushViewController(nextController, animated: true)
    }
}

1 Ответ

0 голосов
/ 25 сентября 2019

Вы можете получить его из свойства "раскадровки".Ниже приведено объявление свойства.

var storyboard: UIStoryboard? { get }

Это будет ноль, если вы создали экземпляр ViewController из кода.Вы получаете это как,

if let storyboard = self.storyboard {
            if let name = storyboard.value(forKey: "name") as? String {
                print(name)
            }
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...