#ios #swift #uitabbar
#iOS #swift #uitabbar
Вопрос:
Я новый разработчик Swift. Я использую Swift 4.2 и XCode 10.2.
У меня есть контроллер панели вкладок с 5 элементами панели вкладок. В контроллере представления для каждого элемента панели вкладок есть кнопка для отображения баланса в другом контроллере представления (назовите его контроллером представления баланса). У меня есть переход от каждой кнопки к контроллеру представления баланса.
Я использую interface builder, но буду рад добавить код.
Как я могу поместить основную панель вкладок в контроллер представления баланса, чтобы, когда пользователь закончил просмотр баланса, он мог выбрать другой элемент панели вкладок и продолжить работу? Я отказался от использования контроллера навигации, потому что кнопка «Назад» будет мешать единообразному представлению в верхней части каждого экрана, и я не хочу его настраивать.
Я не смог найти никаких вопросов SO, которые касаются этой проблемы. И все другие веб-ресурсы, которые я нашел, очень просты в том, как реализовать панели вкладок. Любая помощь будет оценена.
Комментарии:
1. Может кто-нибудь объяснить, почему голосование за понижение? Это проблема стиля? Слишком много вопросов для новичков? Я хотел бы научиться предотвращать то же самое в будущем.
Ответ №1:
Другой подход:
Загрузите Balance View Controller
как дочерний ViewController и отобразите его представление поверх текущего представления. Это оставит панель вкладок в покое, позволяя пользователям переходить на другую вкладку.
Balance View Controller
похоже, это просто отображение информации. Если это так, вы можете добавить жест касания, чтобы удалить его из текущего представления простым нажатием.
Если Balance View Controller
она интерактивная, вы можете добавить кнопку, чтобы удалить ее из текущего представления.
Поскольку вы говорите, что у вас есть кнопка в VC каждой вкладки для отображения Balance View Controller
, то вы, вероятно, также захотите удалить ее из текущего представления при выборе другой вкладки.
Комментарии:
1. ДА. Это то, что я нахожу. Если я встрою навигационный контроллер и скрою его, когда я доберусь до баланса контроллера представления и выберу другую вкладку (отличную от вкладки, с которой я пришел) Я перехожу на эту новую вкладку. Но когда я выбираю ту вкладку, которая впервые привела меня к контроллеру представления баланса — контроллер представления баланса все еще там! Я должен снова нажать на тот же значок вкладки, чтобы вернуться к контроллеру представления для этой вкладки.
2. Могу ли я удалить дочерний элемент из представления в
ViewWillDisappear
? Таким образом, в контроллере представления баланса я всегда могу удалить его перед переходом на любую другую вкладку?3. Спасибо. Я попробую и отчитаюсь.
4.
BalanceViewController
имеет представление таблицы. Я продолжаю получать сообщение об ошибке, что значениеtableview.datasource
(которое является self) равно нулю. Я попытался установить его с помощью экземпляраBalanceViewController
в родительском и нескольких других методов, но это всегда одна и та же ошибка. Я вижу в документации для дочерних контроллеров представления, что родительский элемент управляет данными, но я не могу понять, как разрешитьBalanceViewController
ему быть собственным источником данных. Переход из другого VC в раскадровке отображаетсяBalanceViewController
правильно, поэтому я знаю, что он не сломан. Вот код для настройки дочернего элемента:5. пусть parent = self пусть balanceVC = BalanceViewController() parent.view.addSubview(balanceVC.view) parent.addChild(balanceVC) balanceVC.didMove(toParent: parent)
Ответ №2:
Я отказался от использования контроллера навигации, потому что кнопка «Назад» будет мешать единообразному представлению в верхней части каждого экрана, и я не хочу его настраивать.
Лучший способ добиться этого UINavigationController
— использовать то, что мы можем сделать с верхней панелью навигации, и, черт back button
возьми, мы можем скрыть все это с помощью
// Add this to your viewcontroller
override func viewDidLoad() {
super.viewDidLoad()
self.navigationController?.isNavigationBarHidden = true
}
И, если хотите, вы можете отключить анимацию для контроллера представления
надеюсь, это поможет
Комментарии:
1. Если кнопка «Назад» скрыта, как мне вернуться к предыдущему контроллеру представления?
2. Я думал, вам не нужна кнопка «Назад», хорошо, так что вы должны использовать
dismiss(animated: true, completion: nil)
, чтобы вернуться к нажатию кнопки, теперь вы можете использоватьnavigationController?.popViewController(animated: true)
3. Спасибо. Я хотел использовать главную панель вкладок вместо каких-либо дополнительных кнопок, поскольку единственные места, которые вы можете использовать в приложении, кроме контроллера представления баланса, перечислены на панели вкладок. Но я не вижу способа сделать это. Если мне нужно будет добавить кнопку «Назад», я воспользуюсь вашим предложением.
4. Я думаю, что я неправильно понял. Когда я использую скрытый навигационный контроллер, он сохраняет панель вкладок внизу. Я могу продолжать перемещаться по приложению с помощью панели вкладок, и мне не нужна кнопка «Назад». Я продолжу тестирование и отмечу как ответ.
5. @TMLynch Да, панель вкладок останется внизу, и я рад помочь 🙂