xcode / раскадровка: нельзя перетащить кнопку панели на панель инструментов вверху


99

У меня есть контроллер представления, который является подробным представлением таблицы. Когда вы щелкаете строку таблицы, вы переходите к подробному просмотру. Подробное представление встроено в контроллер навигации, поэтому в левом верхнем углу панели навигации есть кнопка, которая отправляет вас обратно к таблице. Все идет нормально.

Теперь я хочу добавить кнопку редактирования с правой стороны панели навигации, чтобы вы могли редактировать подробное представление. Мой план состоит в том, чтобы модально добавить еще один контроллер представления, который позволит вам редактировать детали элемента. Стандартные вещи.

Однако, когда я пытаюсь перетащить элемент кнопки панели из списка объектов на панель навигации, этого не происходит. Вместо этого, когда я отпускаю кнопку мыши, она оставляет кнопку полосы на контроллере панели вкладок внизу. (Моя схема навигации включает в себя разные вкладки и для каждой вкладки таблицу, подробное представление и т. Д.)

Любой, кто сталкивался с этим раньше, может предложить, что я делаю неправильно, или какой-то обходной путь, чтобы добавить элемент кнопки панели в правую часть экрана навигации. Надо ли добавлять это в код?

Спасибо за любые предложения.


Проверьте следующий учебник brianflove.com/2012/10/01/…
casillas

Мне удалось добавить кнопку с помощью self.navigationItem.rightBarButtonItem = self.editButtonItem; и создал новый editvc в раскадровке, однако я не уверен, как создать segue. Не могу сделать это в раскадровке, потому что кнопка редактирования не видна, поэтому я думаю, что это должно быть в коде. попробуем подготовить к рассуждению?
user1904273 03

Если один из ответов вам помог, вы должны принять его :)

Ответы:


157

У меня такая же проблема с Xcode6, и я заметил, что UINavigationItem добавляется автоматически для первого ViewController, который вы встраиваете в NavigationController, но для последующих ViewController вам придется добавить его вручную следующим образом:

  1. В библиотеке объектов найдите элемент навигации и перетащите его на второй ViewController в раскадровке.
  2. В библиотеке объектов найдите элемент кнопки панели и перетащите его на элемент навигации, созданный на предыдущем шаге.

Теперь ваши кнопки панели будут прикреплены к верхней части сцены.

Обновление Решение по-прежнему работает с XCode 7, но я хотел добавить более наглядную фотографию. На всякий случай, если кто-то не особо знаком со стандартными или техническими названиями, упомянутыми выше. Обратите внимание на красные стрелки справа, они относятся к шагу 1, шагу 2, упомянутому выше. Также обратите внимание на иерархию представлений в левом красном прямоугольнике. введите описание изображения здесь


2
Да, это помогло мне. Я думаю, что это правильный ответ, XCode, похоже, не добавляет элемент навигации к последующим ViewController.
Джереми Чоун

это правильно, но красная стрелка на изображении должна идти от кнопки панели в библиотеке объектов до левого красного поля.
malhal

Вы можете перетащить его на холст, как показано красной стрелкой, или вы можете поместить его в структуру документа, как вы предложили. Это не имеет значения
Wael Showair

Как черт возьми, я нашел этот ответ, потому что он отлично работает - я просто сбит с толку, почему UINavigationItem еще нет на раскадровке? Очевидно, что он присутствует во время выполнения, потому что код self.navigationItem.rightBarButtonItem = ...будет работать. Я предполагаю, что UINavigationController на первом виртуальном канале создает его для всех последующих виртуальных каналов, помещенных в стек. Однако, перетаскивая один из них вручную, почему бы вам не получить два элемента UINavigationItem друг над другом? Тот, который вы перетащили вручную, и тот, который уже есть из UINavigationController?
Джеймс Туми

70

Гадкий трюк:

  1. Измените свой переход на push.
  2. Установите нужный вам контент
  3. Вернуться, чтобы показать

Тогда контент будет доступен для редактирования, и у вас будет нерекомендуемый стиль для перехода.


Блин, такой уродливый. Но это работает для UIBarButtonItemконтроллера представления в Xcode 7.3 .
mikeho 06

OMG, он все еще работает в XCode 8.2.1. Когда это будет исправлено? Никогда, наверное
Дима Ростопира

Это единственный способ, который я нашел без добавления кода.
Джошуа

О боже ... Спасибо (у)
Насир Хан

Я не могу поверить, что эта ошибка все еще существует после более чем 2 лет
Кариони 01

33

В контроллере представления вашей раскадровки, вероятно, отсутствует файл Navigation Item. Вы можете перетащить один из библиотеки объектов на свой контроллер представления.

После этого вы сможете перетаскивать элементы кнопок панели на левую или правую сторону панели навигации.


1
это сработало, но я чувствую, что раньше это делалось автоматически, пока у вас был переход к контроллеру
aryaxt 02

Это должен быть правильный ответ. Остальное мне кажется хаком
MK Yung

23

Я решил это. перетащите «Элемент навигации» в подробное представление. чем вы можете перетащить элемент кнопки панели.


8

Я исправил эту проблему следующим образом: вместо того, чтобы перетаскивать UINavigationController в раскадровку и пытаться добавить к нему UIBarButtonItems, я перетащил UITableViewController, а затем перешел к

Редактор-> Вставить-> Контроллер навигации

Это дало тот же результат, что и раньше, за исключением того, что я мог без проблем добавить UIBarButtonItems с обеих сторон панели навигации.


Ты должен идти наверх !!
Vin

5

На самом деле проблема с xcode. Один трюк, который сработал для меня, - это добавить кнопку панели в ВИД СТРУКТУРЫ ФАЙЛА СЛЕВА, добавляя непосредственно в представление. Надеюсь, это вам поможет. :)


Это работает! Думаю, это решение, если Apple исправит ошибку с Xcode 8.2
Арджун Калидас

5

Я думаю, это ошибка. У меня была такая же проблема. Я исправил ее, отключив классы размеров, а затем включив их.

Вы можете отключить и включить классы размеров в документации по построителю интерфейсов.

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


4

У меня тоже была эта проблема, закрытие и повторное открытие проекта работало для меня.


3

Я считаю, что это причуда XCode. Я была такая же проблема. Мне пришлось сбросить Xcode и сместить размещение вещей на раскадровке, чтобы наконец заставить его работать. Теперь работает.


3

Я думаю, что это ошибка Xcode. В Xcode 8 измените segueв раскадровке перед контроллером представления панели вкладок на все его параметры ( show detail, present...). Затем вернемся к show. Попробуйте перетащить элементы кнопок панели и изменить плитку. Меня устраивает!


1

Вы пробовали «очистить» свой проект? Я знаю, что иногда мне это помогает (просто перейдите в «Продукт»> «Очистить»). Или, как вариант, удалите панель навигации и попробуйте еще раз.

Если вы думаете, что это ошибка программирования, не стесняйтесь передавать свой код. Я был бы рад помочь чем смогу. :)


1

Вы должны сбросить xCode IDE. Закройте xCode и напишите приведенные ниже коды в терминал ... Он будет работать.

rm -rf $HOME/Library/Application Support/Developer/Shared/Xcode
rm -rf $HOME/Library/Preferences/com.apple.dt.Xcode.*
rm -rf $HOME/Library/Saved\ Application\ State/com.apple.dt.Xcode.savedState
rm -rf $HOME/Library/Developer/Xcode

1

Та же проблема. У меня был контроллер табличного представления внутри контроллера навигации, и многие контроллеры представления следовали дальше по цепочке. «Элемент навигации» создавался автоматически для ПЕРВОГО корневого контроллера представления, и я мог без проблем добавить к нему «Элемент кнопки панели». Перетащите через раскадровку. Но это все. В следующем контроллере табличного представления и других контроллерах представления, даже если они находились в пределах исходного контроллера навигации (появилась автоматически созданная кнопка возврата), раскадровка никогда не позволяла мне добавить элемент кнопки панели.

Решение Wael Showair не сработало для меня. Элементы кнопок панели не отображались.

Я решил это программно в итоге (Swift 2.0):

var testButton = UIBarButtonItem(title: "Test Button", style .Plain, target: self, action: "testButtonMethod")
self.tabBarController?.navigationItem.rightBarButtonItem = testButton

Никаких дополнительных элементов навигации или кнопок панели не требуется.


1

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


1

У меня была такая же проблема в xcode 8. Мне пришлось просто закрыть xcode и снова открыть проект, а затем я смог без каких-либо проблем добавить кнопку панели в корневой контроллер.


1

Для XCode 8

Здесь есть много ответов. Я пробовал некоторые из них, но не смог. Итак, я нашел свое решение, просто выберите свой ViewController, перейдите в раздел Attributes Inspector и измените верхнюю панель на непрозрачную панель навигации и стрелку. Вы увидите панель навигации на раскадровке. Вы можете изменить название или добавить какой-нибудь предмет. Если вы не хотите сохранять непрозрачность, вы можете изменить стиль на « Предполагаемый» .

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


1

В Xcode 10 я просто изменил тип перехода к этому новому контроллеру представления на «Push (устаревший)», добавил элемент навигации, как это было разрешено после того, как я сделал этот переключатель. Если вы вернетесь к исходному желаемому типу перехода, элемент навигации останется.


0

Вместо того, чтобы перетаскивать «Элемент кнопки панели» в «Контроллер навигации», перетащите его в «Контроллер детального представления». По мере встраивания подробного представления в «представление навигации» «элемент навигации» будет добавлен в «контроллер подробного представления». Если вы перетащите «Элемент кнопки панели» в правую часть элемента навигации, этот элемент будет включен в «Элементы кнопки правой панели»


0

как сказал Марк Лайонс, я использовал то же самое решение.

  • использовал сначала push segue
  • добавил элемент бара
  • вернуться, чтобы показать переход
  • сделано

0

В Xcode 11 вы можете перетащить кнопку на панель навигации, чтобы создать кнопку панели.

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