UIButton 在 vi​​ewDidLoad() 中始终为零

Posted

技术标签:

【中文标题】UIButton 在 vi​​ewDidLoad() 中始终为零【英文标题】:UIButton is always nil in viewDidLoad() 【发布时间】:2015-08-20 09:03:11 【问题描述】:

我在 Storyboard 中的 ViewController 中添加了一个 UIButton。然后我为它创建了一个 IBOutlet 连接。然后在 viewDidLoad() 中,我想使用创建的按钮进行操作,但它始终为零。

class LeftWeekViewController: UIViewController 

    @IBOutlet weak var tableView: UITableView!
    @IBOutlet weak var weekNumberBtn: PassThroughButton!
    @IBOutlet weak var weekNumberBtnBottomSpacing: NSLayoutConstraint!
    @IBOutlet weak var plusBtn: UIButton!

    var data: [String] = ["sadasd", "adgfdgfdg", "hgfhgfhgfh", "sadasd", "adgfdgfdg", "hgfhgfhgfh", "sadasd", "adgfdgfdg", "hgfhgfhgfh"]
    var sections: [String] = ["[Ma 26 Mei]", "[Di 27 Mei]", "[Wo 28 Mei]"]

    override func viewDidLoad() 
        super.viewDidLoad()

        let calender = NSCalendar.currentCalendar()
        let dateComponent = calender.components(.CalendarUnitWeekOfYear  | .CalendarUnitDay | .CalendarUnitMonth | .CalendarUnitYear, fromDate:NSDate())
        weekNumberBtn.setTitle("\(dateComponent.weekOfYear)", forState: UIControlState.Normal)
        weekNumberBtn.layer.cornerRadius = weekNumberBtn.frame.height / 2
        weekNumberBtn.clipsToBounds = true
        self.view.bringSubviewToFront(weekNumberBtn)
        self.tableView.separatorStyle = .None

        weekNumberBtnBottomSpacing.constant = -1 * (self.tableView(self.tableView, heightForHeaderInSection: 0) - 8)

        tableView.registerNib(UINib(nibName: "LeftWeekTableViewCell", bundle: nil), forCellReuseIdentifier: "LeftWeekCell")

        var pencilImage = UIImage(named: "pencil")!
        pencilImage = resizeImage(pencilImage, size: CGSize(width: plusBtn.frame.width - 15, height: plusBtn.frame.height - 15))

        plusBtn.layer.cornerRadius = plusBtn.frame.size.height / 2
        plusBtn.clipsToBounds = true
        plusBtn.setImage(pencilImage, forState: .Normal)
        plusBtn.contentMode = UIViewContentMode.Center
        plusBtn.layer.shadowColor = UIColor.blackColor().CGColor
        plusBtn.layer.masksToBounds = false
        plusBtn.layer.shadowOffset = CGSizeMake(0, 15)
        plusBtn.layer.shadowRadius = 10
        plusBtn.layer.shadowOpacity = 0.4

        self.view.bringSubviewToFront(plusBtn)
    
    //...

我以同样方式创建的第一个 weekNumberBtn 不是 nil,但第二个 'plusBtn' 始终是 nil。我不知道出了什么问题。有人可以帮我吗?

更新::

我已经清理并重建了我的项目,但它抛出了一个错误,我在创建 ViewController 时传递了错误的 xib 文件名。我已更改 xib 文件名,一切正常。

【问题讨论】:

你检查连接了吗? @anhtu 是的,这里是it is。 尝试产品->清理并重建项目 尝试重新连接,然后重建。 有时,Xcode 不会更新 xib 中的更改。我不知道为什么。也许需要创建另一个问题。 【参考方案1】:

选择按钮并右键单击它,查看是否存在预先设置的网点。如果连接不可用,则将插座提供给 tha 按钮。即使它不起作用删除现有的网点并再次创建网点。放置断点并调试它

【讨论】:

改变按钮弱属性 只是删除“弱”或添加一些东西?我尝试删除,出现相同的结果。 @IBOutlet var plusButton: UIButton! 删除以前的outlet 创建新的outlet 选择强属性 所有outlet必须有weak属性,不要选strong

以上是关于UIButton 在 vi​​ewDidLoad() 中始终为零的主要内容,如果未能解决你的问题,请参考以下文章

UITableView endUpdates 在 vi​​ewDidLoad 中调用时崩溃

核心数据 - 在 vi​​ewDidLoad 之前调用数据源方法

情节提要 xib 在 vi​​ewDidLoad 后“卡住”

UIScrollView 在 vi​​ewDidLoad 中调用 setContentSize 后没有更新,但从按钮调用时会更新

如何处理 iOS 11 Navigation BarButtonItems 错误?

我的 tableview 正在注册单元格之前设置数据