2013-09-22 4 views
42

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

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

Как сделать условный переход так, как с помощью раскадровки?

Спасибо

ответ

68

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

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

  2. Введите подходящий идентификатор для этого сеанса. Например сказать «conditionSegue»

  3. Теперь в файле .m вашего просмотра исходного кода контроллера выполнить свое состояние и вызвать -performSegueWithIdentifier:sender: метод на «Я», как это:

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

Я надеюсь, что я сделал это Чисто.

+0

Он работал твой для меня, я сделал conditionall SEGUE из UITableViewCell, потому что некоторые клетки должны показать некоторый вид и другие клетки других ... Дела в том, что, когда я вернусь из push-сеге, он потерял фокус и сбросил представление, он не вернулся в камеру, которая начала действие. У меня есть таблица с сегментированным элементом управления сверху, который изменяется между двумя источниками данных. Если я выйду из uitableviewcell со вторым показателем сегментированного элемента управления, когда я вернусь из segue, он начнет просмотр с 1-го индекса в сегментированном элементе управления ... – fguespe

+0

@fguespe Вы задаете решение проблемы или это общий комментарий. –

+0

да, мне нужно решение, но я немного продвинулся, и я понимаю, что это не вина условного сегмента. для обычных переходов происходит. Проблема заключается в сегментированном элементе управления, который ищет индекс, когда он возвращается, но он показывает данные первого сегмента. – fguespe

3

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

14

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

Сначала создайте кнопку и используйте 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; 
    } 
+0

Если вы используете xcode 6 и не знаете, какой тип sague использовать, вы можете использовать «Show» sague под «Action Sague». Кроме того, чтобы дать идентификатор (имя) в мага, выберите его в раскадровке и введите имя выбора в поле «Идентификатор» в инспекторе «Атрибуты» (справа) –

1

Создать «родовой» SEGUE по Ctrl перетаскивания с помощью значка контроллера представления в нижней части к месту назначения. Этот сеанс не будет связан с каким-либо действием. Затем в коде, где когда-либо событие, используя свой условный код, который вы хотите, чтобы вызвать SEGUE, звоните:

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

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

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

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

Шаг 3: В вашем ViewControllerforA.скора запись:

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

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

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

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

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

Надежда этой помощь для того, кто ищет вариант Swift

Смежные вопросы