gpt4 book ai didi

ios - Nib 中的 IBOutlets 在 awakeFromNib 和 initWithCoder 上都是 nil——没有 subview

转载 作者:IT王子 更新时间:2023-10-29 05:38:28 25 4
gpt4 key购买 nike

我有一个自定义的 UIView 子类,它通过 Nib 文件(一个 UIImageView、一个 UIView 和一个 UITextField)和 IBOutlets 集添加了三个 subview 。但是当在子类中调用 awakeFromNibinitWithCoder 时,所有 IBOutlets 都是 nil 甚至 subviews 数组也是.

我正在使用 Swift 和 XCode 6 beta 5,其中这个 UIView 子类在一个框架中,我将 UIView 子类添加到我项目中的 Storyboard 中,这样我就可以使用新的 Live查看技术。但是我在实时 View 中也看不到添加的 subview ,这很可悲。

我找不到任何方法来解决这个问题,这是我的 UIView 子类的代码:

import UIKit

@IBDesignable public class BlurredSheetEntryView: UIView {

@IBOutlet var iconImageView: UIImageView?
@IBOutlet var separatorView: UIView?
@IBOutlet public var textField: UITextField?

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

required public init(coder aDecoder: NSCoder!) {
super.init(coder: aDecoder)

for subView in self.subviews {
println("subView: \(subView)")
}

println("self.textField: \(self.textField)")
println("self.iconImageView: \(self.iconImageView)")
println("self.separatorView: \(self.separatorView)")
}

override public func awakeFromNib() {

for subView in self.subviews {
println("subView: \(subView)")
}

println("self.textField: \(self.textField)")
println("self.iconImageView: \(self.iconImageView)")
println("self.separatorView: \(self.separatorView)")

}
}

我的 Nib 文件如下所示:

<?xml version="1.0" encoding="UTF-8" standalone="no"?>
<document type="com.apple.InterfaceBuilder3.CocoaTouch.XIB" version="3.0" toolsVersion="6205" systemVersion="14A314h" targetRuntime="iOS.CocoaTouch" propertyAccessControl="none" useAutolayout="YES" useTraitCollections="YES">
<dependencies>
<plugIn identifier="com.apple.InterfaceBuilder.IBCocoaTouchPlugin" version="6198"/>
<capability name="Aspect ratio constraints" minToolsVersion="5.1"/>
</dependencies>
<objects>
<placeholder placeholderIdentifier="IBFilesOwner" id="-1" userLabel="File's Owner"/>
<placeholder placeholderIdentifier="IBFirstResponder" id="-2" customClass="UIResponder"/>
<view contentMode="scaleToFill" id="iN0-l3-epB" customClass="BlurredSheetEntryView" customModule="BlurredSheetEntry" customModuleProvider="target">
<rect key="frame" x="0.0" y="0.0" width="300" height="50"/>
<autoresizingMask key="autoresizingMask" widthSizable="YES" heightSizable="YES"/>
<subviews>
<imageView userInteractionEnabled="NO" contentMode="scaleToFill" horizontalHuggingPriority="251" verticalHuggingPriority="251" translatesAutoresizingMaskIntoConstraints="NO" id="ZnN-gy-Mc6">
<rect key="frame" x="8" y="5" width="40" height="40"/>
<constraints>
<constraint firstAttribute="width" secondItem="ZnN-gy-Mc6" secondAttribute="height" multiplier="1:1" id="C4N-zC-woh"/>
</constraints>
</imageView>
<textField opaque="NO" clipsSubviews="YES" contentMode="scaleToFill" contentHorizontalAlignment="left" contentVerticalAlignment="center" placeholder="Placeholder" minimumFontSize="17" clearButtonMode="whileEditing" translatesAutoresizingMaskIntoConstraints="NO" id="npg-xI-NSo">
<rect key="frame" x="66" y="8" width="226" height="34"/>
<fontDescription key="fontDescription" type="system" pointSize="15"/>
<textInputTraits key="textInputTraits"/>
</textField>
<view contentMode="scaleToFill" translatesAutoresizingMaskIntoConstraints="NO" id="8lA-9y-yoA">
<rect key="frame" x="56" y="5" width="2" height="40"/>
<color key="backgroundColor" white="0.66666666666666663" alpha="1" colorSpace="calibratedWhite"/>
<constraints>
<constraint firstAttribute="width" constant="2" id="QgG-pW-8q0"/>
</constraints>
</view>
</subviews>
<color key="backgroundColor" white="1" alpha="1" colorSpace="custom" customColorSpace="calibratedWhite"/>
<constraints>
<constraint firstAttribute="bottom" secondItem="8lA-9y-yoA" secondAttribute="bottom" constant="5" id="51o-Il-vGA"/>
<constraint firstItem="8lA-9y-yoA" firstAttribute="leading" secondItem="ZnN-gy-Mc6" secondAttribute="trailing" constant="8" id="AEG-I2-vsT"/>
<constraint firstAttribute="bottom" secondItem="npg-xI-NSo" secondAttribute="bottom" constant="8" id="E0H-fN-lg4"/>
<constraint firstItem="8lA-9y-yoA" firstAttribute="top" secondItem="iN0-l3-epB" secondAttribute="top" constant="5" id="EYR-L8-96J"/>
<constraint firstAttribute="bottom" secondItem="ZnN-gy-Mc6" secondAttribute="bottom" constant="5" id="GFW-R2-jGI"/>
<constraint firstAttribute="trailing" secondItem="npg-xI-NSo" secondAttribute="trailing" constant="8" id="Lws-lv-n37"/>
<constraint firstItem="ZnN-gy-Mc6" firstAttribute="top" secondItem="iN0-l3-epB" secondAttribute="top" constant="5" id="Pv0-ZV-aT4"/>
<constraint firstItem="ZnN-gy-Mc6" firstAttribute="leading" secondItem="iN0-l3-epB" secondAttribute="leading" constant="8" id="XOI-jO-Sv7"/>
<constraint firstItem="npg-xI-NSo" firstAttribute="top" secondItem="iN0-l3-epB" secondAttribute="top" constant="8" id="dA3-Wg-XfN"/>
<constraint firstItem="npg-xI-NSo" firstAttribute="leading" secondItem="8lA-9y-yoA" secondAttribute="trailing" constant="8" id="mq6-6r-Z2b"/>
</constraints>
<nil key="simulatedStatusBarMetrics"/>
<freeformSimulatedSizeMetrics key="simulatedDestinationMetrics"/>
<connections>
<outlet property="iconImageView" destination="ZnN-gy-Mc6" id="0Hp-sr-mqx"/>
<outlet property="separatorView" destination="8lA-9y-yoA" id="VFx-En-K3c"/>
<outlet property="textField" destination="npg-xI-NSo" id="tIy-N2-g2j"/>
</connections>
<point key="canvasLocation" x="371" y="327"/>
</view>
</objects>
</document>

更新:我创建了一个绝对简单的示例项目,我只执行了以下操作:

  • 为 iOS 选择 Master-View 模板
  • 使用 Xib 文件添加名为“MyCustomTableViewCell”的新框架
  • 在Xib文件中添加一个蓝色背景的UIView作为 subview
  • 在Swift文件中添加@IBOutlet和connection
  • 在 Swift 文件中的 awakeFromNib() 中添加一条 println() 语句
  • 将Master tableView中的Cells类设置为框架的子类

当我构建并运行并单击右上角的“+”符号时,由于@IBOutlet,我在控制台上打印出“nil”。这是我的问题,让我烦恼。但也许我在这里做错了什么......

我已经上传了示例工程,这里是下载地址: https://www.dropbox.com/s/vcb0sa98tw6i1iv/NilObjectsFromXib.zip?dl=0

我正在使用一个框架,因为我必须这样做,因为我想在我的主 Storyboard中将我的子类视为实时 View 。

提前感谢您的帮助! :)

最佳答案

我审查了您的项目并且:您需要将 XIB 文件添加到项目设置中的 Copy bundle resourses

您需要通过以下方式注册自定义单元格 XIB,以便在您的表格 View 中使用:

 override func viewDidLoad() {
super.viewDidLoad()
self.tableView.registerNib(UINib(nibName:"MyCustomTableViewCell", bundle: nil), forCellReuseIdentifier: "CustomCell")
}

然后您可以在表格中使用您的自定义单元格:

override func tableView(tableView: UITableView, cellForRowAtIndexPath indexPath: NSIndexPath) -> UITableViewCell {
let cell = tableView.dequeueReusableCellWithIdentifier("CustomCell", forIndexPath: indexPath) as MyCustomTableViewCell

// Do something with your cell

return cell
}

关于ios - Nib 中的 IBOutlets 在 awakeFromNib 和 initWithCoder 上都是 nil——没有 subview ,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/25180110/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com