Что такое StoryBoard ID и как я могу его использовать?
Я новичок в разработке IOS и недавно начал в Xcode 4.5. Я видел для каждого viewController, что я могу установить некоторые переменные идентичности, включая ID раскадровки. Что это такое и как я могу его использовать?
Я начал поиск в стеке потока и не мог найти никакого объяснения этому. Я предположил, что это не просто какая-то глупая метка, которую я могу установить, чтобы помнить свой контроллер, верно? Что оно делает?
2 ответа
Идентификатор раскадровки - это строковое поле, которое можно использовать для создания нового ViewController на основе этого раскадровки ViewController. Пример использования будет из любого ViewController:
//Maybe make a button that when clicked calls this method
- (IBAction)buttonPressed:(id)sender
{
MyCustomViewController *vc = [self.storyboard instantiateViewControllerWithIdentifier:@"MyViewController"];
[self presentViewController:vc animated:YES completion:nil];
}
Это создаст MyCustomViewController на основе раскадровки ViewController, который вы назвали "MyViewController", и представит его над текущим View Controller.
И если вы находитесь в своем приложении делегата, вы можете использовать
UIStoryboard *storyboard = [UIStoryboard storyboardWithName:@"MainStoryboard"
bundle: nil];
Редактировать: Свифт
@IBAction func buttonPressed(sender: AnyObject) {
let vc = storyboard?.instantiateViewControllerWithIdentifier("MyViewController") as MyCustomViewController
presentViewController(vc, animated: true, completion: nil)
}
Изменить для Swift >= 3:
@IBAction func buttonPressed(sender: Any) {
let vc = storyboard?.instantiateViewController(withIdentifier: "MyViewController") as! ViewController
present(vc, animated: true, completion: nil)
}
а также
let storyboard = UIStoryboard(name: "MainStoryboard", bundle: nil)
Чтобы добавить к ответу Эрика и обновить его для Xcode 8 и Swift 3:
Идентификатор раскадровки делает именно то, что подразумевает название: он идентифицирует. Просто он идентифицирует контроллер представления в файле раскадровки. Именно так раскадровка узнает, какой контроллер представления какой.
Теперь, не смущайтесь именем. Идентификатор раскадровки не идентифицирует "раскадровку". Раскадровка, согласно документации Apple, "представляет контроллеры представления для всего или части пользовательского интерфейса вашего приложения". Таким образом, когда у вас есть что-то вроде рисунка ниже, у вас есть раскадровка под названием Main.storyboard, в которой есть два контроллера представления, каждому из которых может быть присвоен идентификатор раскадровки (их идентификатор в раскадровке).
Вы можете использовать ID раскадровки контроллера представления, чтобы создать и вернуть этот контроллер представления. Затем вы можете манипулировать и представлять его так, как хотите. Чтобы использовать пример Эрика, скажем, вы хотите представить контроллер представления с идентификатором "MyViewController" при нажатии кнопки, вы бы сделали это следующим образом:
@IBAction func buttonPressed(sender: Any) {
// Here is where we create an instance of our view controller. instantiateViewController(withIdentifier:) will create an instance of the view controller every time it is called. That means you could create another instance when another button is pressed, for example.
let vc = storyboard?.instantiateViewController(withIdentifier: "MyViewController") as! ViewController
present(vc, animated: true, completion: nil)
}
Пожалуйста, обратите внимание на изменения в синтаксисе.