我将旧应用从.xib-s迁移到.storyboard-s。那些.xibs有许多IBOutlet连接,复制和粘贴视图并重新创建它们非常耗时。我想知道是否有办法无缝地完成这项工作。有谁知道这个问题的解决方案?
答案 0 :(得分:0)
是的,有办法。
确保故事板视图控制器场景具有为视图控制器设置的正确类。
右键单击xib文件,然后选择Open As - >源代码。
找到<subviews> ... </subviews>
对标签,然后复制该部分。
以相同的方式打开故事板(打开为 - &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>
使用<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>
您将从第二个片段中注意到IBActions用视图表示,其中IBOutlets在声明子视图后一起表示。
您可能需要执行更多操作,具体取决于您的xib文件的复杂程度。如果您决定重新创建一些xib组件而不是将它们复制到ID中,则会发生变化,因此请注意这一点。一旦完成,不要忘记从项目中删除xib文件。