Изменение порядка расположения контроллеров панели вкладок в StoryBoard


166

В моем приложении для iPhone у меня есть контроллер панели вкладок с 4 отношениями к 4 различным контроллерам табличного представления. Есть ли способ изменить порядок отношений в StoryBoard графически? Я не могу найти способ сделать это, и я уверен, что я что-то упускаю!


Ответы:


255

В 4.5 сохраните раскадровку после добавления контроллера, переключитесь на другой файл и затем вернитесь в раскадровку, и перетаскивание вкладки должно снова работать.


45
Перетаскивание вкладок! Хорошо, я даже не знал, что мы можем перетащить вкладки. Не очень интуитивно
понятно,

1
Если вам надоест тыкать в пользовательский интерфейс Xcode с заклинаниями переключения / закрытия вкладок, просто посмотрите ответ JannieT. Это быстро и просто.
Sixto Saez

Не интуитивно понятно, но у меня это работало и в Xcode 7.
zeeple

Если вы не видите элементы для перетаскивания, это может быть потому, что вы еще не установили значок. Я обнаружил, что он не появляется, пока я не установил значки!
Брайан,

1
приятно :) даже не знал, что это можно перетаскивать
Amr Angry

133

Вы можете просто изменить порядок, перетаскивая значки в контроллере панели вкладок


4
Если вы используете пользовательские вкладки, вы можете перетаскивать их, чтобы изменить порядок, даже если Tab Bar Controllerсцена показывает серую полосу, элемент панели все еще там. Это особенно незаметно, когда все элементы бара являются пользовательскими.
Джеральд

Самый простой и удобный способ. Работает в Xcode 7.3.1. Свифт 2.2
Марк Баррассо

Работает в Xcode 9 - хотя иконки были невидимы.
Чезаре


15

Я не смог перетащить с XCode 4.6 (с любым из упомянутых сочетаний). Я решил это, открыв storybord в режиме « Исходный код », найдя tabBarController и переставив тег seque .


У меня есть контроллер панели вкладок, вложенный в контроллер разделенного представления, и в результате вкладки контроллера панели вкладок не отображаются в раскадровке. Редактирование исходного кода раскадровки работало на меня. Спасибо!
Скотт Гарднер

14

Я знаю, что OP использует конструктор интерфейса XCode и запрашивает графический способ сделать это, но для разработчиков, работающих с Xamarin iOS Designer, вот обходной путь, который я использую.

Откройте файл .storyboard в текстовом редакторе или с помощью Xcode, щелкните правой кнопкой мыши элемент раскадровки в Project Navigator и выберите Открыть как исходный код». В раскадровке XML найдите <tabBarController ...>узел. Затем я переставлю порядок сегментов в <connections>разделе:

<connections>
    <segue destination="274" kind="relationship" relationship="viewControllers" id="286"/>
    <segue id="943" destination="910" kind="relationship" relationship="viewControllers"/>
    <segue destination="147" kind="relationship" relationship="viewControllers" id="159"/>
</connections>

Поиск для destination= значение атрибута в XML, чтобы определить, на какой контроллер представления указывает элемент segue.


1
Отличное решение. У меня была огромная StoryBoard, и удаление и воссоздание
segues заняло

10

Просто перетащите значки вкладок в панели вкладок.

то есть главная панель вкладок, которая принадлежит контроллеру панели вкладок.

НТН

:: РЕДАКТИРОВАТЬ :: Так что это, похоже, не работает ... Я уверен, что раньше.

В любом случае, самый простой способ, который я нашел, - это удалить вкладки и добавить их обратно в том порядке, в котором вы хотите их показывать.

Надеюсь это поможет.


LOL, только что пошел на тест, и я был неправ. Сожалею. Сделали это раньше, хотя. Одна секунда ...
Фогмейстер

Да, я думаю, что помню, что перетаскивание сработало, хотя я не уверен в этом! Может быть, они что-то изменили в Xcode ..
BigLex

Я только что попробовал, и он отлично работал, просто перетаскивая вкладки в Xcode 4.5
rdelmar

@rdelmar Вы начали свой проект как приложение панели вкладок или добавили контроллер представления панели вкладок в одно приложение просмотра?
BigLex

5
Перетаскивание работает, но оно становится упрямым, если вы что-то сделали в раскадровке, прежде чем пытаться перетаскивать вкладки. Чтобы исправить это, выберите любой другой файл в XCode и затем вернитесь к своей раскадровке. Перетаскивание будет работать снова. Нет необходимости закрывать Xcode или повторно добавлять свои контроллеры.
меммон

9

Как отмечено в комментариях, перетаскивание в настоящее время не работает (Xcode 4.5) после добавления контроллера навигации. Тем не менее, перезапуск Xcode после добавления контроллера, похоже, снова работает перетаскиванием.



7

Если вы откроете раскадровку как «представление исходного кода», а затем закроете ее, откройте ее как представление IB, это, похоже, исправит ошибку.


Это сработало для меня (Xcode 8.1), я смог наконец перетащить, чтобы перестроить после открытия раскадровки в представлении исходного кода.
Undrea

7

Чтобы добавить метод перетаскивания, предоставляемый всеми. Я отправил это как ответ, чтобы я мог включить изображения. Пробовал на Xcode 7.3

Если вы используете пользовательский tab bar itemрежим, вы можете перетаскивать его, чтобы изменить порядок, даже если Tab Bar Controllerсцена показывает серую полосу, элемент панели все еще там. Это особенно незаметно, когда все элементы бара являются пользовательскими.

введите описание изображения здесь описание


4

Я использую XCode 5.1 для разработки iOS 7.1, и я обнаружил, что следующий подход работает для перестановки вкладок в контроллере панели вкладок.

Чтобы изменить порядок вкладок в контроллере панели вкладок, удалите переходы из контроллера панели вкладок в контроллеры подэлемента. Затем заново нарисуйте сегменты в том порядке, в котором вы хотите вкладки. Чтобы «перерисовать», я имею в виду, что вы управляете перетаскиванием из контроллера панели вкладок в контроллер вспомогательного представления и выбираете Segement Segue (внизу списка) => контроллеры представления.


3
правда. Еще один способ сделать это - отредактировать .storyboard как «Исходный код», найти сегменты (они являются тегом <segue>) и изменить их порядок.
voghDev

3

Вы можете убедиться, что для опции «Закладка контроллера вкладок» в главной раскадровке установлено значение «Первый ответчик», что решило ее для меня!


Я пробовал некоторые из этих идей, поскольку у меня сейчас есть эта проблема, независимо от того, какой проект я сейчас поднимаю (новый или старый). Я не могу понять, что означает KayKay под «опцией Tab Controller Dock». У кого-нибудь есть идеи?
Лавр

3

У меня была такая же проблема после добавления контроллера навигации.

Исправление: закройте раскадровку (Ctrl + Cmd + W) и выполните чистую папку сборки (Option + Cmd + Shift + K) и обычную очистку (Cmd + Shift + K). Снова откройте раскадровку, и вы снова сможете перетаскивать предметы.


1

То же самое в xCode 4.6. Первоначально я следовал учебному пособию по началу раскадровки в ios. В момент, когда можно было переключить элемент на TabBarController, я не мог изменить порядок. Я пытался спасти его - не сработало; Тем не менее, как только я закрыл XCode и снова открыл - он работал.


1

Ctrl + перетащите элемент в TabBarController в раскадровке и переместите в нужное положение.


я думаю, что это вариант + перетащить
GGirotto

0

Я также следовал руководству raywenderlich для раскадровок и понял, что после добавления контроллера вкладок я не могу переставить вкладки, перетаскивая его. Ну, видимо, это просто какая-то ошибка в xcode. Так что просто выйдите из xcode, перезапустите его, и на этот раз вы сможете перетаскивать вкладки.


0

Для меня перетаскивание не работает ни в XCode 7.3.1. Перезапуск XCode не помог. И ни одно из вышеупомянутых решений не помогло мне.

Что мне помогло: я удалил связь со вторым элементом и перетащил ctrl из этого элемента в контроллер панели вкладок и создал другую связь. Это было автоматически на втором месте сейчас.


0

Удалите все sequge viewcontrollers с вкладкой. Сначала вам потребуется viewcontroller, а затем другой viewcontroller соединиться с панелью вкладок.

Не нужно перезапускать xcode и не требуется чёткий файл исходного кода при изменении.

Используя наш сайт, вы подтверждаете, что прочитали и поняли нашу Политику в отношении файлов cookie и Политику конфиденциальности.
Licensed under cc by-sa 3.0 with attribution required.