Я создал a Container View в моем приложении. Вид контейнера загружает другие UIViewController, когда пользовательские закладки на UITableviewCell и другие UIViewController загружается внутри контейнера. Я попытался тестирования, вставляя сообщения журнала на другой класс ViewController и выяснили, каждый раз, когда viewDidLoad и ViewDidAppear метод вызывается, в котором говорится, те, класс получает экземпляр каждый раз на вкладке клеток.Как сделать метод viewDidLoad вызова ViewController только один раз?
Но при изучении около зрения контейнера на яблоневых документы https://developer.apple.com/library/ios/featuredarticles/ViewControllerPGforiPhoneOS/CreatingCustomContainerViewControllers/CreatingCustomContainerViewControllers.html
Я нашел UITabBarController также реализует ContainerView и управляет UIViewController в массиве. Я попытался проверки сообщений журнала и обнаружил, что viewDidLoad метод вызывается только один раз, и когда мы посещаем во второй раз на вкладке только viewDidAppear вызывается. Так что мне действительно интересно, что за сценой происходит в этом. Используют ли они UnWind segue (я думаю, нет).
Однако я создал контейнер View Controller с follwing пути следуя этим учебник: https://github.com/codepath/ios_guides/wiki/Container-View-Controllers-Quickstart в
class ViewController: UIViewController {
@IBOutlet weak var contentView: UIView!
var activeViewController : UIViewController? {
didSet{
removeInactiveViewController(oldValue)
updateActiveViewController()
}
}
var cellTxtArrs = ["FIRST","SECOND","THIRD"]
override func viewDidLoad() {
super.viewDidLoad()
// Do any additional setup after loading the view, typically from a nib.
var tblView : UITableView = UITableView()
tblView.frame = CGRectMake(0, 20, 300 ,100)
tblView.separatorColor = UIColor.clearColor()
tblView.scrollEnabled = false
tblView.rowHeight = (30)
self.view.addSubview(tblView)
tblView.delegate = self
tblView.dataSource = self
tblView.registerClass(UITableViewCell.self, forCellReuseIdentifier: "myCell")
}
func removeInactiveViewController(inactiveViewController:UIViewController?){
if let inActiveVC = inactiveViewController{
inActiveVC.willMoveToParentViewController(nil)
inActiveVC.view.removeFromSuperview()
inActiveVC.removeFromParentViewController()
}
}
func updateActiveViewController(){
if let activeVC = activeViewController{
//not necessary
addChildViewController(activeVC)
activeVC.view.frame = contentView.bounds
contentView.addSubview(activeVC.view)
activeVC.didMoveToParentViewController(self)
}
}
override func didReceiveMemoryWarning() {
super.didReceiveMemoryWarning()
// Dispose of any resources that can be recreated.
}
}
extension ViewController : UITableViewDataSource , UITableViewDelegate{
//MARK: table view data source methods
func tableView(tableView: UITableView, cellForRowAtIndexPath indexPath: NSIndexPath) -> UITableViewCell {
// cell.textLabel?.font = UIFont(name: label.font.fontName, size: 22)
var cell : UITableViewCell = tableView.dequeueReusableCellWithIdentifier("myCell") as! UITableViewCell
cell.backgroundColor = UIColor(red: 0.000, green: 0.400, blue: 0.404, alpha: 1.00)
cell.selectionStyle = UITableViewCellSelectionStyle.None
cell.textLabel?.text = self.cellTxtArrs[indexPath.row]
cell.textLabel?.textAlignment = NSTextAlignment.Left
cell.textLabel?.textColor = UIColor.whiteColor()
return cell
}
func tableView(tableView: UITableView, numberOfRowsInSection section: Int) -> Int {
return self.cellTxtArrs.count
}
//MARK: - table view delegate methods
func tableView(tableView: UITableView, didSelectRowAtIndexPath indexPath: NSIndexPath) {
var row = indexPath.row
switch row {
case 0:
let storyboard: UIStoryboard = UIStoryboard(name: "Main", bundle: nil)
let firstVC = storyboard.instantiateViewControllerWithIdentifier("firstVC") as! FirstViewController
activeViewController = firstVC
case 1:
var storyboard: UIStoryboard = UIStoryboard(name: "Main", bundle: nil)
let secondVC = storyboard.instantiateViewControllerWithIdentifier("secondVC") as! SecondViewController
activeViewController = secondVC
case 2:
let storyboard: UIStoryboard = UIStoryboard(name: "Main", bundle: nil)
let thirdVC = storyboard.instantiateViewControllerWithIdentifier("thirdVC") as! ThirdViewController
activeViewController = thirdVC
default:
println("no index")
}
}
}
umm.yeah..that означает, что я должен создавать экземпляр контроллера только один раз ... не нажав на ячейку вправо? –
Зависит, у вас есть вся сила. Вы можете сохраняться, если навсегда в массиве, и только экземпляр его один раз. Вы можете, например, удалить его из памяти. Удалите его для определенного устройства ... Все, что вы хотите.Но да, в общем, речь идет о том, чтобы создать экземпляр его один раз и сохранить его до тех пор, пока это возможно. –
oh..thanks действительно ... еще один вопрос ... у меня будут проблемы позже при создании экземпляра только один раз .... или я должен добавить некоторый логин в метод viewDidAppear для внесения изменений в другой viewContreoller, поскольку viewDidLoad не вызывает ? Как мне управлять изменениями для них? –