У меня есть UIViewController
с UITabBar
наверху. Я не использую UITabBarController
, потому что мне нужен UITabBar
наверху, а не внизу. Вот мой текущий контроллер вид:Текущий контроллер представления, в то время как контроллер текущего вида имеет UITabBar, но нет UITabBarController
class CustomTabBarController: UIViewController, UITabBarDelegate
{
@IBOutlet weak var tabBar: UITabBar!
var viewControllers: [UIViewController] = []
//MARK: UIVIewController delegate
override func viewDidLoad()
{
super.viewDidLoad()
//TabBarController
let storyboard = UIStoryboard(name: "Main", bundle: nil)
self.viewControllers.append(storyboard.instantiateViewControllerWithIdentifier("myWorldViewController") as UIViewController)
self.viewControllers.append(storyboard.instantiateViewControllerWithIdentifier("meViewController") as UIViewController)
self.viewControllers.append(storyboard.instantiateViewControllerWithIdentifier("welcomeViewController") as UIViewController)
self.tabBar.selectedItem = self.tabBar.items?.first
//Graphical Settings
let itemWidth = self.tabBar.frame.width/3 as CGFloat
let image = self.imageWithColor(UIColor.grayColor(), size: CGSizeMake(itemWidth, 49))
UITabBar.appearance().barTintColor = UIColor.whiteColor()
UITabBarItem.appearance().setTitleTextAttributes([NSFontAttributeName:UIFont(name: "Helvetica Neue", size: 20)!], forState: UIControlState.Normal)
UITabBarItem.appearance().titlePositionAdjustment = UIOffset(horizontal: 0, vertical: -10)
UITabBar.appearance().tintColor = UIColor.whiteColor()
UITabBar.appearance().selectionIndicatorImage = image
//Borders
self.tabBar.layer.borderColor = UIColor.grayColor().CGColor
self.tabBar.layer.borderWidth = 1
self.tabBar(self.tabBar, didSelectItem: (self.tabBar.items?.first)!)
}
func tabBar(tabBar: UITabBar, didSelectItem item: UITabBarItem)
{
self.view.insertSubview(self.viewControllers[item.tag].view, belowSubview: self.tabBar)
}
override func didReceiveMemoryWarning()
{
super.didReceiveMemoryWarning()
}
//MARK: Utils
func imageWithColor(color: UIColor, size: CGSize) -> UIImage
{
let rect = CGRectMake(0, 0, size.width, size.height)
UIGraphicsBeginImageContext(size)
let context = UIGraphicsGetCurrentContext()
CGContextSetFillColorWithColor(context, color.CGColor)
CGContextFillRect(context, rect)
let image: UIImage = UIGraphicsGetImageFromCurrentImageContext()
UIGraphicsEndImageContext()
return image
}
}
Что мне сейчас нужно, это представить контроллер представления при нажатии на кнопку в одном из видов вкладок. На контроллере назначения мне нужно сохранить UITabBar
(например, при использовании обычного UITabBarController
). Как я могу это сделать ?
Спасибо за ваш ответ. Я проверю ссылку, которую вы предоставили, чтобы узнать больше о контроллерах Container View, чтобы я не только копировал код, не зная, что я делаю. Я помету ваш ответ как «Принято», как только я попробую это. – Aeradriel
После этого кода у меня все еще есть такая же проблема, когда я пытаюсь нажать новый контроллер просмотра с помощью кнопки в подвью, панель вкладок «стирается». Действительно, на этом уровне взаимодействия с панелью вкладок нет. Есть ли способ уведомить Контейнер о том, что мы хотим подтолкнуть новый VC? (без использования NSNotification) – Aeradriel
Вы можете пересечь свойства 'parentViewController' /' presentingViewController', чтобы найти 'CustomTabBarController'. Или, если CustomTabBarController - это контроллер корневого представления ваших приложений, вы можете получить к нему доступ, используя '[UIApplication sharedApplication] .keyWindow.rootViewController'. Использование уведомлений тоже отлично. Что подходит вам, зависит от вашей общей архитектуры. – jaetzold