【问题标题】:Instantiating UIView from xib/nib using Swift使用 Swift 从 xib/nib 实例化 UIView
【发布时间】:2018-02-15 10:53:07
【问题描述】:

当我尝试调用此函数时收到错误Ambiguous reference to member 'TimelineSectionHeaderView'

if let view = TimelineSectionHeaderView.instantiateFromNib() {
    return view
}

我在这里做错了什么?

import UIKit

class TimelineSectionHeaderView: UIView {

  @IBOutlet weak var dayLabel: UILabel!
  @IBOutlet weak var dateLabel: UILabel!

  class func instantiateFromNib() -> TimelineSectionHeaderView? {
      let x = UINib(nibName: "timelineSectionHeader", bundle: nil).instantiate(withOwner: nil, options: nil).first as? TimelineSectionHeaderView
      print(x ?? "no value")
      return x
  }
}

【问题讨论】:

  • 我从未尝试过,所以我最好的想法是 - 删除 if let。你试过简单的let吗?如果可行,那么如何将内容逐行添加到完整的if letreturn,您没有包含表示它返回TimelineSectionHeaderView 的代码。第三个也是最后一个想法:您的班级名称(很好)表明您可能有一个表格视图 - 您的问题中没有其他任何内容清楚地说明了这一点。考虑到这一点,您是否尝试过所有调试“想法”?你能用你的代码实例化一个简单的“虚拟标题视图”吗?
  • 我试过没有if let(但只使用let)仍然没有工作。然而,我又观察到一件事……我的func tableView(_ tableView: UITableView, viewForHeaderInSection section: Int) -> UIView? { 根本没有被调用……同时函数func numberOfSections(in tableView: UITableView) -> Int 正在被调用
  • 那么这就是你开始的地方。不管这段代码在哪里——你没有提到为什么return——试试simple let 看看为什么instantiateFromNib 不起作用。更多...我只是注意到它谈到了ambiguous reference - 这意味着您有两个编译器无法解析的引用。就像TimeLineSectionView。您是否进行了全局搜索并查看了结果?
  • 我试过你的代码,它没有问题,它从 xib 文件加载视图。也许您的 xib/nib 文件或项目的其他部分存在问题。
  • 哦,好吧……我试过没有return它仍然给我错误。我进行了全局搜索,只有一个地方定义了TimelineSectionHeaderView……它告诉我在第一个声明的同一行上有一个重复的声明……但是,它现在编译并运行……我现在有一个不同的问题:@987654340 @

标签: ios swift cocoa-touch uiview


【解决方案1】:

您需要删除下面的这一行:-

if let view = TimelineSectionHeaderView.instantiateFromNib() {
    return view
}

像这样创建一个实例方法:-

func instantiateFromNib() -> TimelineSectionHeaderView? {
      let x = UINib(nibName: "timelineSectionHeader", bundle: nil).instantiate(withOwner: nil, options: nil).first as? TimelineSectionHeaderView
      print(x ?? "no value")
      return x
  }

现在在您的 ViewController 中,您可能已经创建了 TimelineSectionHeaderView 的出口,使用该 outlet 变量,然后像这样调用它:-

if let view = timelineViewInstanceVariable.instantiateFromNib() {
    return view
}

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2023-03-19
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2016-03-13
    相关资源
    最近更新 更多