2014-04-22 3 views
1

Если у меня есть несколько segues от одного viewcontroller к другому, есть ли способ назначить их идентификаторы в переменную, чтобы можно было ссылаться на переменную, а не на буквенную строку, как показано ниже?Как создать переменную для имени segue?

- (void) prepareForSegue:(UIStoryboardSegue *)segue sender:(id)sender{ 
    NSLog(@"%@", segue.identifier); 
    if([segue.identifier isEqualToString:@"someSegueName"]){ 
    //push to view controller 
    } 
} 

Мне бы хотелось, чтобы при изменении имени идентификатора он обновил назначение переменной.

+0

Нет. Нет способа сделать это. И если каким-то образом (по Obj-C runtime плагина), если вам удастся это сделать, это будет не полезно, как вы хотите. И причина этого в том, что может быть много segue из одного ViewController. Таким образом, вы получите массив идентификаторов, и вам придется работать с индексом. Теперь, если вы кодируете для массива и индекса, вы должны изменить свой код, когда когда-либо новый переход произойдет или старый сегмент будет удален. Поэтому в конечном счете вам нужно изменить код, поэтому он не полезен. – CRDave

ответ

1

Не понимаю, почему вы пытаетесь это сделать? Вы можете попробовать под логикой, если она вам подходит.

Вы можете попробовать с перечислением, указав значения enum для разных segues как строки и используя эти строки для идентификатора.

может хранить в массиве и использовать соответственно

Другим способом было бы путем создания констант для каждого идентификатора.

+0

Если имя идентификатора изменено, все ваши предложения требуют обновления идентификатора в двух местах. Лучше всего было бы получить имя идентификатора, из которого когда-либо Xcode хранит его, и присваивает это значение некоторой глобальной переменной. – 4thSpace

+0

Я не думаю, что это возможно. –

+0

@ 4thSpace Использование названия segue здесь, как сказать, вы THT segue (потому что этот метод является общим для всех segues). Если вы не используете имя, как вы можете ожидать, что время выполнения определит, что это segue? Я не думаю, что вы можете получить изменения в segue в раскадровке, изменив имя segue в вашем коде, если это то, что вы хотите. Конечно, вы можете написать утилиту для обновления имени segue в раскадровке, которая затем перейдет к вашим файлам классов и обновит его. Но это еще один перебор. –

0

Вы можете сохранить его в переменном, когда этот метод называется первый раз таким образом: -

- (void) prepareForSegue:(UIStoryboardSegue *)segue sender:(id)sender{ 
    NSLog(@"%@", segue.identifier); 
    if([segue.identifier isEqualToString:@"someSegueName"]){ 
     someVariable = seague; // This is my addition. 
     //push to view controller 
    } 
} 

Но я бы рекомендовал вам сохранить имена SEGUE в постоянная строках в классе, так что вы можете использовать это повторно, не допуская ошибок. Таким образом, изменение названия segue также будет проще позже.

- (void) prepareForSegue:(UIStoryboardSegue *)segue sender:(id)sender{ 
    NSLog(@"%@", segue.identifier); 
    if([segue.identifier isEqualToString:someVariable]){ //I've changed this line 
     someVariable = seague; 
     //push to view controller 
    } 
} 
Смежные вопросы