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

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

1 голос
/ 19 ноября 2011

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

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

Теперь раскадровка ... Раскадровка не позволяет загружать контроллер представления из 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 ]

3 голосов
/ 23 ноября 2011

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

(UIStoryboard *)storyboardWithName:(NSString *)name bundle:(NSBundle *)storyboardBundleOrNil
2 голосов
/ 14 сентября 2012

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

0 голосов
/ 24 ноября 2011

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

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

В коде:

[self performSegueWithIdentifier:@"mySegueNameFromInterfaceBuilder" sender:self];
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...