2014-10-13 5 views
0

У меня проблема с моим приложением. Я использую навигационный контроллер и TableView. Итак, в моем первом представлении у меня есть TableView с именем propTableView, это список свойств. Когда я нажимаю на ячейку, она приводит меня к другому ViewController с другим TableView с именем propDetailTableView. Я выполнить переход от PropViewController к PropDetailViewController:Просмотр появляется дважды при выполнении segue

-(void)tableView:(UITableView *)tableView didSelectRowAtIndexPath:(NSIndexPath *)indexPath { 
    NSString *sectionTitle = [aromaPropSectionTitles objectAtIndex:indexPath.section]; 
    NSArray *sectionProp = [propData objectForKey:sectionTitle]; 
    propName = [sectionProp objectAtIndex:indexPath.row]; 
    [self performSegueWithIdentifier:@"PropDetail" sender:self]; 
} 

- (void)prepareForSegue:(UIStoryboardSegue *)segue sender:(id)sender { 
    if ([segue.identifier isEqualToString:@"PropDetail"]) { 
     PropViewController *propView = segue.destinationViewController; 
     propView.title = propName; 
     SQLmanager *sqlManager = [[SQLmanager alloc] initDatabase:@"prop_max.sqlite3"]; 
     NSString *propRequest = [NSString stringWithFormat:@"SELECT id_prop FROM prop_max WHERE prop_name_fr LIKE '%@'", propName]; 
     NSLog(@"propRequest = %@", propRequest); 
     NSString *propId = [sqlManager getString:propRequest]; 
     NSLog(@"propId = %@", propId); 
    } 
} 

На данный момент я просто изменить название панели навигации. Но поведение ненормальное. Вместо того, чтобы отображать PropDetailViewController с новым заголовком, он отображает новый PropDetailViewController с заголовком прецедента (если в первый раз я нажимаю на ячейку, он не отображает заголовок), а затем отображает PropDetailViewController с заголовком. Это не проблема, но когда я нажимаю на Back в левом верхнем углу, он возвращает меня к PropDetailViewController со старым названием, и я должен нажать второй раз на Back, чтобы вернуться к PropViewController.

я нажимаю на ячейки (я нажал на Anti-Douleur, но теперь я выбираю Actif-Cosémtique): Actif Cosmétique

Он показывает это: Old Title

Тогда второй после: Good Title

ответ

1

Ах, извините, я знаю, в чем проблема.

Именно это просто:

prepareForSegue бежит ПУТЬ ПЕРЕД UIView устанавливается.

Это касается только контроллера вида, а не вида.

То, что вы должны сделать, это ...

SET Некоторые сведения в течение Segue ....

-(void)prepareForSegue:(UIStoryboardSegue *)segue sender:(id)sender 
    { 
    if ([[segue identifier] isEqualToString:@"idUber"]) 
    { 
    Uber *uber = [segue destinationViewController]; 
    uber.classnameToUse = .. whatever ...; 
    } 
    } 

, а затем в этом другом классе ... Много позже, когда viewDidLoad БЕГА, затем используйте эту информацию.

примечание - viewDidAppear может быть более подходящим, в зависимости от ситуации

-(void)viewDidLoad 
    { 
    [self loadThisMainSection:self.classnameToUse]; 

    // note that back during the segue you have CORRECTLY SET .classnameToUse 
    // that was a long time ago. but we only use it now. 
    } 

это так просто!

Вы должны сделать это в каждой ситуации снегом.

Вы в конечном итоге с именами переменных, как «whenYouCanUseThisValue» ....

В вашем случае вам нужно свойство:

@property (strong) NSString *useThisTitleLaterWhenYouAreLoading; 

BTW не забывайте, что если это не- класса, это «назначить»

@property (assign) CGPoint afterLoadingHereIsThePosition; 
@property (assign) CGFloat onceYouLoadUseThisAlpha; 
+0

Это не работает. –

+0

нет причин, по которым он не должен работать (1) вам нужно добавить новое свойство в свой класс PropDetailViewController, который будет (сильной) строкой. назовите его «shouldBeTitle», например. установите это в prepareForSegue. затем в viewDidAppear, запишите его и посмотрите, правильно ли это. если так задано название! заметьте try viewdidappear, а также viewdidload. зависит от того, что вы делаете. – Fattie

+0

Да, я сделал это, но есть еще 1 вид, появляющийся перед правильным представлением. –

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