Я новичок в разработке IOS и недавно начал работать с Xcode 4.5. Я видел для каждого viewController, что я могу установить некоторые переменные идентичности, включая идентификатор раскадровки. Что это и как я могу это использовать?
Я начал искать в stackoverflow и не смог найти этому объяснения. Я предположил, что это не просто какой-то дурацкий ярлык, который я могу установить, чтобы запомнить свой контроллер, верно? Что оно делает?
ID раскадровки - это поле 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», и представит его над текущим контроллером представления.
И если вы являетесь делегатом своего приложения, вы можете использовать
Давайте попробуем, и как вы получитеself.storyboard
RTB
Доступ к self.storyboard можно получить из любого контроллера просмотра. Сейчас я отредактирую свой ответ, чтобы вы могли видеть
Эрик
А что, если нужно получить к нему доступ из моего AppDelegate или любого другого класса?
RTB
Добавлено еще одно изменение, показывающее, как получить доступ к раскадровке из любого файла.
Эрик
1
self.storyboardможно получить доступ из любого контроллера представления, который был загружен из раскадровки. Если контроллер представления не был загружен из раскадровки, это свойство равно нулю.
Роб Майофф
13
Чтобы добавить к ответу Эрика и обновить его для Xcode 8 и Swift 3:
ID раскадровки делает именно то, что подразумевает название: он идентифицирует. Только то , что он идентифицирует в контроллер представления в файле раскадровки. Так раскадровка узнает, какой контроллер представления какой.
Пусть вас не смущает название. Идентификатор раскадровки не идентифицирует «раскадровку». Раскадровка, согласно документации Apple, «представляет собой контроллеры представления для всего или части пользовательского интерфейса вашего приложения». Итак, когда у вас есть что-то вроде изображения ниже, у вас есть раскадровка под названием Main.storyboard, которая имеет два контроллера представления, каждому из которых может быть присвоен идентификатор раскадровки (их идентификатор в раскадровке).
Вы можете использовать идентификатор раскадровки контроллера представления для создания и возврата этого контроллера представления. Затем вы можете манипулировать им и представлять его, как хотите. Чтобы использовать пример Эрика, скажем, вы хотите представить контроллер представления с идентификатором 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)}
Желтый значок предупреждения указывает на то, что второй контроллер представления не имеет точки входа и / или идентификатора. Это можно решить, присвоив ему идентификатор раскадровки или подключив его к другому контроллеру представления в раскадровке. Таким образом, раскадровка знает, как ее найти и идентифицировать.
Taiwosam
Мне не удалось найти поле ID раскадровки, поэтому спасибо за картинку. Он находится в том же положении на Xcode 9.
self.storyboard
self.storyboard
можно получить доступ из любого контроллера представления, который был загружен из раскадровки. Если контроллер представления не был загружен из раскадровки, это свойство равно нулю.Чтобы добавить к ответу Эрика и обновить его для Xcode 8 и Swift 3:
ID раскадровки делает именно то, что подразумевает название: он идентифицирует. Только то , что он идентифицирует в контроллер представления в файле раскадровки. Так раскадровка узнает, какой контроллер представления какой.
Пусть вас не смущает название. Идентификатор раскадровки не идентифицирует «раскадровку». Раскадровка, согласно документации Apple, «представляет собой контроллеры представления для всего или части пользовательского интерфейса вашего приложения». Итак, когда у вас есть что-то вроде изображения ниже, у вас есть раскадровка под названием Main.storyboard, которая имеет два контроллера представления, каждому из которых может быть присвоен идентификатор раскадровки (их идентификатор в раскадровке).
Вы можете использовать идентификатор раскадровки контроллера представления для создания и возврата этого контроллера представления. Затем вы можете манипулировать им и представлять его, как хотите. Чтобы использовать пример Эрика, скажем, вы хотите представить контроллер представления с идентификатором MyViewController при нажатии кнопки, вы бы сделали это следующим образом:
Обратите внимание на изменения в синтаксисе.
источник