2014-10-14 5 views
0

У меня проблема с моим приложением.Segue выполняется перед выбором ячейки

У меня есть 3 Контроллеры наблюдения, назовем их Oil, App и Prop. Эти 3 контроллера просмотра встроены в навигационные контроллеры. И в этих контроллерах просмотра я получил 3 вида таблицы.

Main.storyboard

Так от до вниз и слева направо:

Prop View Controller ->Prop Detail View Controller

Oil View Controller ->Oil Detail View Controller ->Web View Controller

App View Controller ->App Detail View Controller

Итак, посередине (Oil) Все работает нормально, я нажимаю на ячейку, и отображается Oil Detail View Controller, с информацией, которую я прошел через мой Segue.

OilViewController.m:

- (void)tableView:(UITableView *)tableView didSelectRowAtIndexPath:(NSIndexPath *)indexPath { 
    NSString *sectionTitle = [aromaSectionTitles objectAtIndex:indexPath.section]; 
    NSArray *sectionAroma = [tableData objectForKey:sectionTitle]; 
    aromaNom = [sectionAroma objectAtIndex:indexPath.row]; 
    [self performSegueWithIdentifier:@"Detail" sender:self]; 
} 

- (void)prepareForSegue:(UIStoryboardSegue *)segue sender:(id)sender { 
    if ([segue.identifier isEqualToString:@"Detail"]) { 
     OilDetailViewController *test = segue.destinationViewController; 
     test.aromaName = aromaNom; 
     test.botaniqueName.text = botaniqueName; 
    } 
} 

И я также выполняет SEGUE между Oil Detail View Controller и Web View Controller так:

- (void)prepareForSegue:(UIStoryboardSegue *)segue sender:(id)sender { 
    if ([segue.identifier isEqualToString:@"webView"]) { 
     NSLog(@"Segue is catched"); 
     WebViewViewController *webView = segue.destinationViewController; 
     webView.aromaUrl = _aromaName; 
    } 
} 

I нажмите на оранжевую кнопку и отображает WebView.

Но теперь, если я делаю ТОЧНУЮ вещь в Prop или App, она не работает должным образом.

Например, в Prop Detail VC У меня есть ярлык, который отображает выбранное свойство, но он отображает мне контроллер View с меткой, содержащей старое выбранное свойство, прежде чем отобразить мне правильное свойство, выбранное в метке. Итак, у меня есть 2 Prop Detail View отображается и встроен в мой контроллер навигации.

я сделал видео о тренажере: http://videobam.com/VwgLx

Код в PropViewController.m:

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

- (void)prepareForSegue:(UIStoryboardSegue *)segue sender:(id)sender { 
    if ([segue.identifier isEqualToString:@"PropDetail"]) { 
     PropDetailViewController *propView = segue.destinationViewController; 
     propView.propStr = propName; 
     NSLog(@"PREPARE FOR SEGUE PROP VIEW CONTROLLER"); 
    } 
} 

И в PropDetailViewController.m:

- (void)viewDidLoad { 
    [super viewDidLoad]; 
    self.propLabel.text = _propStr; 
    NSLog(@"VIEW DID LOAD PROP DETAIL"); 
    // Do any additional setup after loading the view. 
} 

Наконец бревнами:

Logs

Заранее спасибо за вашу помощь, я застрял с этим, и никто в моей команде не знает Иос .. Так что я один с этим!

+0

О, мужчина! Ваша раскадровка - это сеть :) Можете ли вы сделать простую компоновку (рядом). Я едва вижу реальный поток. – Kampai

+0

Забудьте о сети слева, это просто ссылка между 3-мя кнопками и соответствующими представлениями. Не так важно, важные ссылки видны –

ответ

0

Так что мне наконец удалось найти правильное решение ..Я до сих пор не знаю, почему он работает на Oil и вызывает проблемы с другими видами, но все же; вот решение:

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

Удалить метод выше. И сделайте все, что вы делаете в этом методе, в методе prepareForSegue:

- (void)prepareForSegue:(UIStoryboardSegue *)segue sender:(id)sender { 
    if ([segue.identifier isEqualToString:@"PropDetail"]) { 
     PropDetailViewController *propView = segue.destinationViewController; 
     NSIndexPath *indexPath = [self.propTableView indexPathForSelectedRow]; 
     NSString *sectionTitle = [aromaPropSectionTitles objectAtIndex:indexPath.section]; 
     NSArray *sectionApp = [propData objectForKey:sectionTitle]; 
     NSString *name = [sectionApp objectAtIndex:indexPath.row]; 
     propView.propStr = name; 
    } 
} 

Теперь все работает нормально! Но это не логика, что она работает в одном месте, а не в другом.

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