Что такое идентификатор StoryBoard и как я могу это использовать?

Я новичок в разработке IOS и недавно начал работу в Xcode 4.5. Я видел для каждого viewController, что я могу установить некоторые идентификационные переменные, включая идентификатор раскадровки. Что это и как я могу его использовать?

enter image description here

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

Ответ 1

Идентификатор раскадровки - это поле String, которое вы можете использовать для создания нового 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

И если вы находитесь в своем делете приложения, вы можете использовать

UIStoryboard *storyboard = [UIStoryboard storyboardWithName:@"MainStoryboard"
                                                         bundle: nil];

Изменить: Swift

@IBAction func buttonPressed(sender: AnyObject) {
    let vc = storyboard?.instantiateViewControllerWithIdentifier("MyViewController") as MyCustomViewController
    presentViewController(vc, animated: true, completion: nil)
}

и

let storyboard = UIStoryboard(name: "MainStoryboard", bundle: nil)

Ответ 2

Чтобы добавить к Эрику ответ и обновить его для Xcode 8 и Swift 3:

Идентификатор раскадровки делает именно то, что подразумевает название: оно идентифицирует. Просто, что идентифицирует контроллер просмотра в файле раскадровки. Это то, как раскадровка знает, какой контроллер просмотра есть.

Теперь не путайте имя. Идентификатор раскадровки не идентифицирует "раскадровку". Раскадровка, согласно документации Apple, представляет собой контроллеры представлений для всех или части пользовательского интерфейса вашего приложения. Итак, когда у вас что-то похожее на рисунок ниже, у вас есть раскадровка Main.storyboard, в которой есть два контроллера вида, каждому из которых может быть присвоен идентификатор раскадровки (их идентификатор в раскадровке).

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

Вы можете использовать идентификатор раскадровки диспетчера представлений, чтобы создать экземпляр и вернуть этот контроллер. Затем вы можете манипулировать и представлять его, как хотите. Чтобы использовать пример Eric, предположим, что вы хотите представить контроллер вида с идентификатором "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)
}

Обратите внимание на изменения в синтаксисе.