2014-10-29 3 views
0

Я переношу старое приложение из .xib-s в .storyboard-s. Эти .xibs имеют много соединений IBOutlet, и очень много времени для копирования & вставьте представление и заново создайте их. Мне было интересно, есть ли способ сделать это без проблем. Кто-нибудь знает решение этой проблемы?Копирование с .xib на .storyboard и сохранение соединений IBOutlet

+0

Я думаю, что Xcode делает это автоматически, как только вы измените класс ViewController на ваш фактический класс контроллера. Вы ничего не можете с этим поделать, если xcode не делает это автоматически. – iphonic

ответ

0

Да, есть способ.

  1. Убедитесь, что сценарий контроллера сценарной сцены имеет правильный набор классов для контроллера вида.

  2. Щелкните правой кнопкой мыши на файле xib и выберите Open As -> Source Code.

  3. Найти парную метку <subviews> ... </subviews> и скопировать раздел.

  4. Откройте раскадровку таким же образом (Open As -> Исходный код) и найдите соответствующий контроллер представления в xml (помечен комментарием xml, например <!--MyViewController>), и скопируйте и вставьте в него объекты subviews xml из xib, внутри контроллеров вида <view> ... </view> теги. Например

    <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> скопировать по всем IBOutlets. Обратите внимание, что соединения идут под <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, а не скопировать их по идентификаторам, это изменится, поэтому имейте это в виду. Не забудьте удалить файл xib из проекта, как только вы закончите.

+1

Я думал об этом, но надеялся, что есть другой способ. Теперь, кто хочет написать приложение, которое делает это автоматически :) –

Смежные вопросы