【问题标题】:Unable to connect IBOutlet to XIB File无法将 IBOutlet 连接到 XIB 文件
【发布时间】:2018-01-19 21:36:02
【问题描述】:

我正在尝试实现 Koloda 刷卡方式。我创建了一个结构为 Image 1 & 2 的 .xib 文件。

如图 1 所示,我已将 File's Owner 设置为 XIB Files 自定义类。

在图 2 中,我将班级留空(不确定这是否正确)

我的 NIB 类是按照下面的代码。

import UIKit
import Koloda

class CardView: KolodaView {

var view: UIView!
var nibName: String = "CardView"
var uid: String!

@IBOutlet weak var profileImage: UIImageView!
@IBOutlet weak var nameLabel: UILabel!

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

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

func setUp() {

    view = loadViewFromNib()

    view.frame = bounds
    view.autoresizingMask = [.flexibleWidth, .flexibleHeight]
    view.isUserInteractionEnabled = true
    addSubview(view)

}

func loadViewFromNib() -> UIView {
    let bundle = Bundle(for: CardView.self)
    let nib = UINib(nibName: String(describing: CardView.self), bundle: bundle)
    let view = nib.instantiate(withOwner: self, options: nil)[0] as! UIView

    return view
}
}

在我的控制器中,我有如下的索引视图;

func koloda(_ koloda: KolodaView, viewForCardAt index: Int) -> UIView {

    _ = userResults[Int(index)]

    let bundle = Bundle(for: CardView.self)
    let nib = UINib(nibName: String(describing: CardView.self), bundle: bundle)
    let view = nib.instantiate(withOwner: self, options: nil)[0] as! UIView

    return view
}

我无法插入我的 IBOutlets 并在我的 UIViewController 中引用它们。因为我将获取 geoFire 和 FirDatabase 信息并填充视图。我知道这与文件的所有者有关。我只是不确定如何将 IBOutlets 设置为子视图而不是自定义类。

任何帮助表示赞赏。

【问题讨论】:

  • 既然您的目标是获得CardView,为什么还要让koloda 方法返回UIView
  • 第一件事我猜 CardView 是 XIB 视图。并且 setUp() 不能显式调用,因为新的 CardView 将被添加到自身上(视图初始化时递归)。并且猜测您想要从 xib 到视图控制器本身的标签出口,您必须将文件所有者更改为您想要出口的视图控制器。
  • @snjmhj 没错。我相信插座必须添加到 CardView 类而不是 ViewController。

标签: swift xib nib iboutlet


【解决方案1】:

尝试将 CardView 类设置为自定义类 CardView 而不是 UIView

【讨论】:

  • 如果我改变 loadViewFromNib - 让 view = nib.instantiate(withOwner: self, options: nil)[0] as! UIView 让 view = nib.instantiate(withOwner: self, options: nil)[0] as! CardView 和相同的 - viewForCardAtIndex 我收到错误(无法转换类型“UIView”的值)
【解决方案2】:

终于经过几个小时的修补。

  1. 现在上课了;

    import UIKit
    
    class CardView: UIView {
    
    var uid: String!
    
    @IBOutlet weak var profileImage: UIImageView!
    @IBOutlet weak var nameLabel: UILabel!
    
    }
    
  2. 已删除文件所有者

  3. xib 中的 CardView 现在设置为 CardView
  4. viewForCardAt 现在是;

    func koloda(_ koloda: KolodaView, viewForCardAt index: Int) -> UIView {
    
    let bundle = Bundle(for: CardView.self)
    let nib = UINib(nibName: String(describing: CardView.self), bundle: bundle)
    let view = nib.instantiate(withOwner: self, options: nil)[0] as! CardView
    
    let users = userResults[Int(index)]
    
    view.profileImage.sd_setImage(with: URL(string: users.userProfileURL))
    view.nameLabel.text = users.userName
    view.uid = users.uid
    
    return view
    

    }

我现在有一张有效的“带有地理定位功能的 Tinder 卡”:)

【讨论】:

    猜你喜欢
    • 2015-07-05
    • 1970-01-01
    • 2014-12-28
    • 1970-01-01
    • 2017-06-14
    • 1970-01-01
    • 1970-01-01
    • 2014-11-29
    • 2021-12-19
    相关资源
    最近更新 更多