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

Условный Segue с помощью раскадровки

Мне просто нужно знать, как сделать некоторые "условные" перенаправления /segue для некоторого вида. Например:

Если пользователь еще не зарегистрировался, появится окно с формой входа. Но если пользователь уже вошел в систему, они увидели бы их просмотр профиля.

Как сделать условный segue, как при использовании раскадровки?

Спасибо

4b9b3361

Ответ 1

Для условных отрезков не начинайте сегу с кнопки, как обычно. Вместо этого используйте следующие шаги:

  • В своей тестовой загрузке запустите segue непосредственно с контроллера исходного вида на контроллер представления назначения. Для этого вы можете перетащить значок контроллера исходного вида на панель чуть ниже представления на контроллер представления места назначения в основной области холста. Просто помните, что вам нужно подключить два контроллера представления напрямую, а не с каким-либо контролем.

  • Введите подходящий идентификатор для этого сеанса. Например, скажите "conditionSegue"

  • Теперь в вашем исходном представлении контроллеры .m файла выполните ваше условие и вызовите метод -performSegueWithIdentifier:sender: на "self" следующим образом:

    -(void)loadDestinationVC{  
        if(condition == YES){  
    
           [self performSegueWithIdentifier:@"conditionSegue" sender:nil];  
        }  
    }
    

Надеюсь, я дал понять.

Ответ 2

Я считаю, что лучший подход, если вы хотите использовать segues от кнопок, будет использовать это:

Сначала создайте кнопку и используйте segue, чтобы подключить ее к другому виду, дайте этому segue имя

то используйте этот метод в вашем .m файле

    - (BOOL)shouldPerformSegueWithIdentifier:(NSString *)identifier sender:(id)sender {
    if ([identifier isEqualToString:@"SegueName"]) {
        //Check if should make the segue 
        //if not do something
        [self doSomething];
        //and return NO;
        return NO;
    }
    return YES;
    }

Ответ 3

В Swift вы можете сделать: как @Gaurav Сингх предложил в своем ответе

Шаг 1: Вставьте сегмент из ViewControllerA в ViewControllerB. Сег должен начинаться с самого ViewControllerA, а не с какого-либо элемента управления (например, кнопки).

Шаг 2: Дайте segue уникальный идентификатор в раскадровке. Пример: seageFromAtoB

Шаг 3: В вашем ViewControllerforA.swift пишите:

if(condition == true) {
    self.performSegueWithIdentifier("seageFromAtoB", sender: self)
}

Если вы выполняете некоторую задачу в другом Thread, то использование performSegueWithIdentifier может вызывать исключение.

Если вы получите эту ошибку, вы должны использовать:

if(condition==true){
      NSOperationQueue.mainQueue().addOperationWithBlock {
           self.performSegueWithIdentifier("seageFromAtoB", sender: self)
      }
}

Это будет выполнять перенаправление segue в главном Thread.

Надеемся на эту помощь для тех, кто ищет вариант Swift

Ответ 4

Вы делаете segues напрямую с одного контроллера на другой (или другие) и даете им идентификаторы. В коде, который вы вызываете, выбирайте между segues в зависимости от ваших условий и вызывайте executeSegueWithIdentifier: отправитель:.

Ответ 5

Создайте "generic" segue, перетащив ctrl из значка контроллера вида внизу в пункт назначения. Этот сеанс не будет связан с каким-либо действием. Затем в вашем коде, где когда-либо событие использует ваш условный код, который вы хотите вызвать, выполните вызов:

- (void)performSegueWithIdentifier:(NSString *)identifier sender:(id)sender