Xib Vs Storyboard, как обновить

Я изучал раскадровку на новой iOS 5.0. Это кажется действительно простым в использовании и реализации, но мой вопрос... Как я могу обновить старую Xib до раскадровки?

Например. У меня есть некоторые классы, которые я разработал, когда не было раскадровки, и некоторые из этих классов поставляются с файлом xib, который помогает мне быстро настроить пользовательский макет. Очевидно, что когда я использую этот вид класса, мне нужно создать его экземпляр с помощью initWithNibName:bundle: и теперь он готов к использованию, и я могу использовать его столько раз, сколько мне нужно, потому что макет закодирован внутри xib.

Теперь Storyboard ... Storyboard не позволяет загружать контроллер представления из xib, и я не нашел способа загрузить файл раскадровки внутри основной раскадровки. Кажется, мне нужно переконфигурировать компоновку для конкретного контроллера представления каждый раз, когда я использую его в новом проекте. Кажется, что теперь я вынужден реконфигурировать компоновку моего контроллера в каждом новом приложении, которое использует этот контроллер, вместо того, чтобы использовать XIB-файл с макетом внутри.

Может быть, что-то я не понял. Кто-нибудь может помочь мне понять, как лучше использовать раскадровку?

Заранее спасибо.

Габриэле.

РЕДАКТИРОВАТЬ в ответ на sw3n

Возможно я понял благодаря sw3n. Этот код ниже работает, но это полностью правильно?

// All this code is implemented inside the MyViewController class.

// Attached to an UIButton;
- (void)loadNewController:(id)sender {
    [self performSegueWithIdentifier:@"newControllerIdentifier" sender:sender];
}

- (void)performSegueWithIdentifier:(NSString *)identifier sender:(id)sender {
    // As suggested by sw3n
    // Load the storyboard from file.
    UIStoryboard *storyboardTest = [UIStoryboard storyboardWithName:@"StoryBoardLoad_Test" bundle:nil];
    // Instantiate the viewController that live in the storyboard file
    UIViewController *destinationViewController = [storyboardTest instantiateViewControllerWithIdentifier:@"newControllerIdentifier"];

    // Instantiate a segue to start the chain
    UIStoryboardSegue *segue = [[UIStoryboardSegue alloc] initWithIdentifier:identifier source:self destination:destinationViewController];
    [self prepareForSegue:segue sender:sender];
}

- (void)prepareForSegue:(UIStoryboardSegue *)segue sender:(id)sender {
    if ([segue.identifier isEqualToString:@"newControllerIdentifier"]) {
        [segue.destinationViewController setModalTransitionStyle:UIModalTransitionStyleFlipHorizontal];

        // Are there new options to present the controller?
        // If I was in a NavigationController a could obviously push it.
        [self presentModalViewController:segue.destinationViewController animated:YES];
    }
}

3 ответа

Решение

Это то, что вы ищете?

(UIStoryboard *)storyboardWithName:(NSString *)name bundle:(NSBundle *)storyboardBundleOrNil

Звучит немного поздно, чтобы ответить, но, похоже, нет никакого ответа на этот вопрос. Вы можете использовать storyboardWithName(), который Nightfirecat упоминал выше. Создайте новый Viewcontroller из UIStoryboard и подключите новый ViewController туда, куда вы хотите в иерархии представлений. Вы также можете использовать несколько файлов раскадровки для сегментирования вашего UX-дизайна. Я написал кое-что о том, как подключить его как rootcontroller на моем сайте, но в принципе он должен работать где угодно.

Интерфейсный Разработчик:

  1. выберите переход в вашем контроллере представления
  2. перейти на вкладку атрибутов
  3. дать название
  4. установить стиль перехода

В коде:

[self performSegueWithIdentifier:@"mySegueNameFromInterfaceBuilder" sender:self];
Другие вопросы по тегам