Подтвердить что ты не робот

Сеге из одной раскадровки в другую раскадровку?

У меня слишком много просмотров на одной раскадровке, которая заставляет ее работать очень медленно. Мне сказали, что решение этой проблемы будет состоять в том, чтобы разбить одну раскадровку на несколько раскадровки. Может ли кто-нибудь сказать мне, как я могу перейти из представления на раскадровке 1 к представлению в раскадровке 2 с помощью кнопки?

4b9b3361

Ответ 1

Я пробовал все, что читал, но все равно не имел успеха. Мне удалось заставить его работать с помощью Разрушителя Роба Браунса Он легко реализуется и работает очень быстро

Ответ 2

С помощью Xcode 7 вы можете выбрать ссылки для раскадровки

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

и установите целевую раскадровку и контроллер

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

Ответ 4

В Swift (iOS 8.1) это довольно легко:

  var storyboard: UIStoryboard = UIStoryboard(name: "Another", bundle: nil)
  var vc = storyboard.instantiateViewControllerWithIdentifier("NextViewController") as AnotherViewController
  self.showViewController(vc, sender: self)

Обновление для Swift 3:

let storyboard: UIStoryboard = UIStoryboard(name: "Another", bundle: nil)
let vc = storyboard.instantiateViewController(withIdentifier: "NextViewController") as! AnotherViewController
self.show(vc, sender: self)

Ответ 5

Другое решение, использующее segues (iOS SDK 6.0+), который сохраняет код отдельно по назначению и оставляет место для настройки:

- (BOOL)shouldPerformSegueWithIdentifier:(NSString *)identifier sender:(id)sender {
    //check/validate/abort segue
    return YES;
}//optional

- (void)prepareForSegue:(UIStoryboardSegue *)segue sender:(id)sender {
    //sender - segue/destination related preparations/data transfer
}

#pragma mark - Table view delegate

- (void)tableView:(UITableView *)tableView didSelectRowAtIndexPath:(NSIndexPath *)indexPath {
    UIViewController *destination = [[UIStoryboard storyboardWithName:@"SomeStoryboard" bundle:nil] instantiateInitialViewController];

    UIStoryboardSegue *segue = [UIStoryboardSegue segueWithIdentifier:@"identifier" source:self destination:destination performHandler:^(void) {
        //view transition/animation
        [self.navigationController pushViewController:destination animated:YES];
    }];

    UITableViewCell *cell = [self.tableView cellForRowAtIndexPath:indexPath];
    [self shouldPerformSegueWithIdentifier:segue.identifier sender:cell];//optional
    [self prepareForSegue:segue sender:cell];

    [segue perform];
}

Примечание: UITableViewCell *cell используется как sender, чтобы поддерживать поведение ответа по умолчанию TableViewController.

Ответ 6

Наконец, XCode 7 добавил эту функцию, в которой вы можете переходить между контроллерами представлений в двух разных раскадках с использованием построителя интерфейса. До сих пор мы должны были делать это программно.

Ответ 7

Прежде всего, разбить раскадровку на несколько отдельных - это отличная идея, которая избавляет от большой головной боли (особенно если вы находитесь в команде и имеете дело с большим количеством конфликтов слияния в файле раскадровки).

Теперь, чтобы ответить на ваш вопрос - вы не можете выполнить segue между двумя раскадками обязательно, но одно решение, с которым я имел большой успех, - это сделать что-то вроде этого:

- (IBAction)buttonPressed:(id)sender {

    UIViewController *otherVC = [[UIStoryboard storyboardWithName:@"SecondStoryboard" bundle:nil] instantiateInitialViewController]; //Or get a VC by its identifier

    [self.navigationController pushViewController:otherVC animated:YES];
}

Просто загрузите другую раскадровку и вызовите instantiateInitialViewController или instantiateViewControllerWithIdentifier:, затем выполните любой переход, который вы хотели бы.

Надеюсь, что это поможет.

Ответ 8

Вот простое решение Swift:

    let viewController:UIViewController = UIStoryboard(name: "Main", bundle: nil).instantiateViewControllerWithIdentifier("ViewController") as UIViewController
    // .instantiatViewControllerWithIdentifier() returns AnyObject! this must be downcast to utilize it

    self.presentViewController(viewController, animated: false, completion: nil)

Ответ 9

Swift 3

let vc = UIStoryboard(name: "StoryboardName", bundle: nil).instantiateViewController(withIdentifier: "ViewControllerIdentifier") as? ExpectedViewControllerClass
self.show(vc, sender: self)

Где "StroboardName" - это имя вашего .storyboardfile. "ViewControllerIdentifier" - это идентификатор представления в доске объявлений. И "я" - это любой UIViewController

В моем случае идентификатор был "selectCountryViewController"