Що таке ідентифікатор StoryBoard і як це можна використовувати?


110

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

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

Я почав пошук в stackoverflow і не зміг знайти пояснення для цього. Я припускав, що це не просто якась дурна етикетка, яку я можу встановити, щоб запам'ятати свій контролер правильно? Що це робить?

Відповіді:


132

Ідентифікатор розповіді - це поле 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", і представить її над поточним контролером перегляду

І якщо ви є делегатом програми, ви можете використовувати його

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)

Спробуємо це, і як ви отримаєтеself.storyboard
RTB

Доступ до self.storyboard можна отримати з будь-якого контролера перегляду. Я відредагую свою відповідь зараз, щоб ви могли бачити
Ерік

А що, якщо потрібно, щоб отримати доступ до нього з мого AppDelegate або будь-якого іншого класу?
RTB

Додано ще одне редагування, яке показує, як отримати доступ до розкадрування з будь-якого файлу.
Ерік

1
self.storyboardможна отримати доступ з будь-якого контролера перегляду, завантаженого із дошки розкадрування. Якщо контролер перегляду не був завантажений із таблиці, ця властивість дорівнює нулю.
пограбувати майофф

13

Щоб додати відповідь Еріка та оновити її для Xcode 8 та Swift 3:

Ідентифікатор рекламної дошки робить саме те, що випливає з назви: він ідентифікує. Тільки те , що він ідентифікує в контролер уявлення в файлі розкадровки. Саме так розкадровка знає, який саме контролер перегляду.

Тепер не плутайте ім’я. Ідентифікатор загальнодоступної дошки не ідентифікує "загадку". Згідно з документацією 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)
}

Зверніть увагу на зміни в синтаксисі.


Жовтий значок попередження пов’язаний з тим, що контролер другого виду не має точки входу та / або ідентифікатора. Цю проблему можна вирішити, надавши їй ідентифікатор розкадровки або підключивши його до іншого контролера перегляду в дошці. Таким чином, розкадрівка знає, як її досягти та визначити.
Тайвосам

Мені не вдалося знайти поле ідентифікатора розкадрування, тому дякую за фотографію. Це місце в Xcode 9.
Ісаак Боска
Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.