【问题标题】:Link xib file with UIViewController and Custom Class将 xib 文件与 UIViewController 和自定义类链接
【发布时间】:2015-10-18 00:34:55
【问题描述】:

为了创建 xib 文件,我添加了 UIViewController 的一个新的 cocoa touch 文件子类,并选中了“同时创建 XIB 文件”。

我的 xib 文件中只有一个标签。

在我的视图控制器中:

import UIKit

class TestControllerViewController: UIViewController {

    @IBOutlet weak var label: UILabel!

    override func viewDidLoad() {
        super.viewDidLoad()

        // Do any additional setup after loading the view.
    }

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

除了我的 IBoutlet(我至少检查了 10 次连接检查器)。

还有我的自定义类:

import Foundation
import UIKit


class Card: UIView {
    internal var number:Int?

    required init?(coder aDecoder: NSCoder) {
        super.init(coder: aDecoder)
    }

    override init(frame: CGRect) {
        super.init(frame: frame)

    }

    convenience init()
    {
        self.init()
    }

}

extension UIView {
    class func loadFromNibNamed(nibNamed: String, bundle : NSBundle? = nil) -> UIView? {
        return UINib(
            nibName: nibNamed,
            bundle: bundle
            ).instantiateWithOwner(nil, options: nil)[0] as? UIView
    }
}

我在我的初始 viewController 中实例化了这个 xib 文件:

import UIKit

class ViewController: UIViewController {

    override func viewDidLoad() {
        super.viewDidLoad()
        // Do any additional setup after loading the view, typically from a nib.
        var test:Card = Card.loadFromNibNamed("TestControllerViewController")! as! Card
        test.number = 18
        //self.view.addSubview(test)
    }

我仍然有这个错误:

2015-07-27 17:48:52.919 TestXib[6865:578635] *** Terminating app due to uncaught exception 'NSUnknownKeyException', reason: '[<NSObject 0x7fcec14b1970> setValue:forUndefinedKey:]: this class is not key value coding-compliant for the key label.'

我不知道为什么,我尝试清理/重建、删除 DerivedData、再次创建 xib 文件等。

你能帮帮我吗?

谢谢。 本

【问题讨论】:

    标签: swift uiview xib swift2


    【解决方案1】:

    你处理错误的方式。来自另一个 UIViewController 的 xib 的自定义 UIView 会混淆。但我会带你摆脱这个错误。请参阅下面的设置。

    FileOwnerTestControllerViewController 更改为 Card 删除Outlet 参考:

    将主视图更改为Card。它可以帮助您将UIView 转换为Card

    顺便说一句:我建议您创建新的 xib 文件 Card.xib 并将其与 Card.swift 连接

    【讨论】:

    • 是的,谢谢,我这样做了,并将我的操作(addTarget ..)从这张卡链接到特定的 ViewController,一切正常。谢谢@longpham。
    猜你喜欢
    • 2017-11-05
    • 2012-04-23
    • 2016-10-31
    • 2011-11-27
    • 1970-01-01
    • 1970-01-01
    • 2011-06-01
    • 1970-01-01
    • 2015-11-17
    相关资源
    最近更新 更多