Выполнить программную реализацию пользовательского представления xib (в функции карты Koloda) - PullRequest
0 голосов
/ 24 апреля 2020

Справочная информация:

Я пытаюсь создать пользовательский интерфейс Tinder-esque, который загружает профили пользователей в стопку карточек с помощью библиотеки Koloda - библиотеки считывания карточек Tinder, основанной на UITableView. В делегатской функции Koloda viewForCardAt(), где я должен возвращать представление для вставки в карточки, я создал, заполнил и возвратил специальный файл xib, представляющий карточки профиля.

Проблема:

После того, как программная копия моего пользовательского xib была возвращена в представление функции viewAtCard моего Koloda, и я запустил приложение, я получил следующий код ошибки из Thread 1 в первой строке моего файла AppDelegate:

...NSUnknownKeyException', reason: … this class is not key value coding-compliant for the key X

Примечание: нет ошибки, если я просто создаю экземпляр UIImageView и просто возвращаю его, так что очевидно, что что-то не так с тем, как я делаю свой xib ...

Код:

Контроллер My View:

import UIKit
import Koloda
import Firebase

class HomeScreenViewController: UIViewController, KolodaViewDelegate, KolodaViewDataSource {
    //map: each card to data from userCards

    func koloda(_ koloda: KolodaView, viewForCardAt index: Int) -> UIView {
        //render a ProfileCard given this profile's info:
        let view = Bundle.main.loadNibNamed("ProfileCard", owner: self, options: nil)?.first as! ProfileCard
        view.profileLabel.text = "personsName"
        return view
    }
}

Файл xib My ProfileCard: Очень простой c xib-файл, содержащий UIImageView и UILabel сверху. Размер установлен в произвольной форме, атрибут FileOwner установлен в ProfileCard

<?xml version="1.0" encoding="UTF-8"?>
<document type="com.apple.InterfaceBuilder3.CocoaTouch.XIB" version="3.0" toolsVersion="16096" targetRuntime="iOS.CocoaTouch" propertyAccessControl="none" useAutolayout="YES" useTraitCollections="YES" useSafeAreas="YES" colorMatched="YES">
    <device id="retina6_1" orientation="portrait" appearance="light"/>
    <dependencies>
        <plugIn identifier="com.apple.InterfaceBuilder.IBCocoaTouchPlugin" version="16087"/>
        <capability name="Safe area layout guides" minToolsVersion="9.0"/>
        <capability name="documents saved in the Xcode 8 format" minToolsVersion="8.0"/>
    </dependencies>
    <objects>
        <placeholder placeholderIdentifier="IBFilesOwner" id="-1" userLabel="File's Owner" customClass="ProfileCard" customModule="MojoJojo" customModuleProvider="target">
            <connections>
                <outlet property="container" destination="iN0-l3-epB" id="NW0-eP-701"/>
                <outlet property="image" destination="AGi-0q-6ds" id="12w-8B-gwl"/>
                <outlet property="nameAge" destination="GDn-Uz-UhE" id="Wrc-ar-wbY"/>
            </connections>
        </placeholder>
        <placeholder placeholderIdentifier="IBFirstResponder" id="-2" customClass="UIResponder"/>
        <view contentMode="scaleToFill" id="iN0-l3-epB">
            <rect key="frame" x="0.0" y="0.0" width="381" height="581"/>
            <autoresizingMask key="autoresizingMask" widthSizable="YES" heightSizable="YES"/>
            <subviews>
                <imageView clipsSubviews="YES" userInteractionEnabled="NO" contentMode="scaleAspectFit" horizontalHuggingPriority="251" verticalHuggingPriority="251" fixedFrame="YES" translatesAutoresizingMaskIntoConstraints="NO" id="AGi-0q-6ds">
                    <rect key="frame" x="0.0" y="0.0" width="381" height="582"/>
                    <autoresizingMask key="autoresizingMask" flexibleMaxX="YES" flexibleMaxY="YES"/>
                </imageView>
                <label opaque="NO" userInteractionEnabled="NO" contentMode="left" horizontalHuggingPriority="251" verticalHuggingPriority="251" fixedFrame="YES" text="Label" textAlignment="natural" lineBreakMode="tailTruncation" baselineAdjustment="alignBaselines" adjustsFontSizeToFit="NO" translatesAutoresizingMaskIntoConstraints="NO" id="GDn-Uz-UhE">
                    <rect key="frame" x="22" y="480" width="181" height="36"/>
                    <autoresizingMask key="autoresizingMask" flexibleMaxX="YES" flexibleMaxY="YES"/>
                    <fontDescription key="fontDescription" type="system" pointSize="17"/>
                    <nil key="textColor"/>
                    <nil key="highlightedColor"/>
                </label>
            </subviews>
            <color key="backgroundColor" systemColor="systemBackgroundColor" cocoaTouchSystemColor="whiteColor"/>
            <freeformSimulatedSizeMetrics key="simulatedDestinationMetrics"/>
            <viewLayoutGuide key="safeArea" id="vUN-kp-3ea"/>
            <point key="canvasLocation" x="-51" y="504"/>
        </view>
    </objects>
</document>

Мой файл ProfileCard Swift:

import UIKit

//the 'controller'
class ProfileCard: UIView {
    //reference to image in the profile card
    @IBOutlet weak var imageElement: UIImageView!
    //reference to the name and age label
    @IBOutlet weak var nameAgeLabel: UILabel!
}
...