【问题标题】:Is there a way I can identify .storyboard associated with viewController?有没有办法可以识别与 viewController 关联的 .storyboard?
【发布时间】:2020-01-25 14:18:33
【问题描述】:

storyboard 中,可以找到关联viewControllerid。但据我所知,反过来是不可能的:也就是说,在viewController 中,我能看到storyboard 连接到什么吗?

问题是,我目前正在使用 viewController,但不知道它与 storyboard 相关联。

这是来自 Shreeram-Bhat 建议的代码:

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

【问题讨论】:

    标签: swift xcode uiviewcontroller storyboard


    【解决方案1】:

    您可以从“故事板”属性中获取它。下面是属性的声明。

    var storyboard: UIStoryboard? { get }
    

    如果您从代码中实例化了 ViewController,它将为零。你懂的,

    if let storyboard = self.storyboard {
                if let name = storyboard.value(forKey: "name") as? String {
                    print(name)
                }
    }
    

    【讨论】:

    • @Shreeram-Brhat 我收到一个错误:Expected '{' to start getter definition 刚写完。
    • 你是从你的 ViewController 中调用它的吗?如果是,那么您可以发布您的代码吗?
    • 当然可以,但是代码很多。您的建议在viewdidload 的顶部。感谢您的帮助!
    • 看到这里你得到的错误:stackoverflow.com/questions/24120390/…
    • 我发布的代码实际上是故事板属性的声明。要使用它,您需要在视图控制器上调用它。我将编辑我的答案,向您展示如何在您的 ViewController 中实际获取它。
    猜你喜欢
    • 2017-10-25
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2021-04-17
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2022-08-20
    相关资源
    最近更新 更多