IBOutlets в Nib равны нулю как для awakeFromNib, так и для initWithCoder – нет подзаголовков

У меня есть пользовательский подкласс UIView с тремя дополнительными объектами, добавленными к нему через файл Nib (UIImageView, UIView и UITextField) и набор IBOutlets. Но когда awakeFromNib или initWithCoder awakeFromNib в подклассе, тогда все IBOutlets равны nil и даже массив subviews пуст .

Я использую Swift и XCode 6 beta 5, где этот подкласс UIView находится в рамках, и я добавил подкласс UIView к Storyboard в моем проекте, чтобы использовать новую технологию Live View . Но я не могу видеть добавленные subviews в Live View, который очень печален.

Я не мог найти способ исправить это, вот код из моего подкласса 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> 

UPDATE: я создал абсолютно простой пример проекта, где я только сделал следующее:

  • выберите шаблон Master-View для iOS
  • добавить новую структуру под названием «MyCustomTableViewCell» с файлом Xib
  • добавьте UIView с голубым цветом фона как подвью в файле Xib
  • добавить @IBOutlet и соединение в файле Swift
  • добавьте инструкцию println () в awakeFromNib () в файл Swift
  • установить класс ячеек в мастер-таблице в подкласс из структуры

Когда я создаю и запускаю и нажимаю «+» – знак в правом верхнем углу, я получаю «нуль», напечатанный на консоли в результате для @IBOutlet. Это моя проблема, и меня это раздражает. Но, возможно, я делаю что-то неправильно здесь …

Я загрузил пример проекта, вот URL загрузки: https://www.dropbox.com/s/vcb0sa98tw6i1iv/NilObjectsFromXib.zip?dl=0

Я использую фреймворк, потому что мне нужно, чтобы мой подкласс рассматривался как Live View в моей главной раскадровке.

Спасибо за любую помощь заранее! 🙂

Я рассмотрел ваш проект и: вам нужно добавить свой XIB-файл для Copy bundle resourses ресурсов Copy bundle resourses в настройках проекта

Вам необходимо зарегистрировать пользовательский элемент XIB для использования в вашем представлении таблицы через:

  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 } 
Interesting Posts
Давайте будем гением компьютера.