从.xib复制到.storyboard并保留IBOutlet连接

时间:2014-10-29 10:04:49

标签: ios objective-c iphone xcode storyboard

我将旧应用从.xib-s迁移到.storyboard-s。那些.xibs有许多IBOutlet连接,复制和粘贴视图并重新创建它们非常耗时。我想知道是否有办法无缝地完成这项工作。有谁知道这个问题的解决方案?

1 个答案:

答案 0 :(得分:0)

是的,有办法。

  1. 确保故事板视图控制器场景具有为视图控制器设置的正确类。

  2. 右键单击xib文件,然后选择Open As - >源代码。

  3. 找到<subviews> ... </subviews>对标签,然后复制该部分。

  4. 以相同的方式打开故事板(打开为 - &gt;源代码)并在xml中找到相应的视图控制器(由xml注释标记,例如<!--MyViewController>),然后复制并粘贴您从视图控制器<view> ... </view>标记内的xib子视图xml。例如

    <viewController id="vXZ-lx-hvc" customClass="TwoViewController" sceneMemberID="viewController">
                <layoutGuides>
                    <viewControllerLayoutGuide type="top" id="jyV-Pf-zRb"/>
                    <viewControllerLayoutGuide type="bottom" id="2fi-mo-0CV"/>
                </layoutGuides>
                <view key="view" contentMode="scaleToFill" id="kh9-bI-dsS">
                    <rect key="frame" x="0.0" y="0.0" width="320" height="568"/>
                    <autoresizingMask key="autoresizingMask" flexibleMaxX="YES" flexibleMaxY="YES"/>
                    <subviews>
                        <button opaque="NO" contentMode="scaleToFill" fixedFrame="YES" contentHorizontalAlignment="center" contentVerticalAlignment="center" buttonType="roundedRect" lineBreakMode="middleTruncation" translatesAutoresizingMaskIntoConstraints="NO" id="fLe-1C-hTu">
                            <rect key="frame" x="116" y="244" width="46" height="30"/>
                            <state key="normal" title="Button">
                                <color key="titleShadowColor" white="0.5" alpha="1" colorSpace="calibratedWhite"/>
                            </state>
                        </button>
                    </subviews>
                    <color key="backgroundColor" white="1" alpha="1" colorSpace="custom" customColorSpace="calibratedWhite"/>
                </view>
            </viewController>
    
  5. 使用<connections> ... </connections>重复上述步骤以复制所有IBOutlet。请注意,这些连接位于<view> .. </view>标记下方,但位于<viewController> ... </viewController>

        <viewController id="vXZ-lx-hvc" customClass="TwoViewController" sceneMemberID="viewController">
                    <layoutGuides>
                        <viewControllerLayoutGuide type="top" id="jyV-Pf-zRb"/>
                        <viewControllerLayoutGuide type="bottom" id="2fi-mo-0CV"/>
                    </layoutGuides>
                    <view key="view" contentMode="scaleToFill" id="kh9-bI-dsS">
                        <rect key="frame" x="0.0" y="0.0" width="320" height="568"/>
                        <autoresizingMask key="autoresizingMask" flexibleMaxX="YES" flexibleMaxY="YES"/>
                        <subviews>
                            <button opaque="NO" contentMode="scaleToFill" fixedFrame="YES" contentHorizontalAlignment="center" contentVerticalAlignment="center" buttonType="roundedRect" lineBreakMode="middleTruncation" translatesAutoresizingMaskIntoConstraints="NO" id="fLe-1C-hTu">
                                <rect key="frame" x="116" y="244" width="46" height="30"/>
                                <state key="normal" title="Button">
                                    <color key="titleShadowColor" white="0.5" alpha="1" colorSpace="calibratedWhite"/>
                                </state>
                                <connections>
                                    <action selector="samButtonTap:" destination="vXZ-lx-hvc" eventType="touchUpInside" id="1sQ-0S-S8z"/>
                                </connections>
                            </button>
                        </subviews>
                        <color key="backgroundColor" white="1" alpha="1" colorSpace="custom" customColorSpace="calibratedWhite"/>
                    </view>
                    <connections>
                        <outlet property="samButton" destination="fLe-1C-hTu" id="8GK-Nn-Loy"/>
                    </connections>
                </viewController>
    
  6. 您将从第二个片段中注意到IBActions用视图表示,其中IBOutlets在声明子视图后一起表示。

    您可能需要执行更多操作,具体取决于您的xib文件的复杂程度。如果您决定重新创建一些xib组件而不是将它们复制到ID中,则会发生变化,因此请注意这一点。一旦完成,不要忘记从项目中删除x​​ib文件。