2013-04-07 2 views
0

В RootViewController У меня есть кнопка, которая при щелчке делает self.navigationController нажатием на CategoryViewController.Пропускная способность с использованием делегата не работает

Затем, в CategoryViewController, нажмите один элемент нажимать на SubCatsViewController. и Когда я выбрал ячейку, и она должна рассеять CategoryViewController и SubCatsViewController назад к RootViewController.

Но как это сделать?

Если я использую rejectViewControllerAnimated, он отклоняет только SubCatsViewController, а не CategoryViewController. Я написал делегата в SubCatsViewController, поэтому я могу получить выбранное значение от SubCatsViewController, а в RootViewController Я согласен с этим протоколом делегата, чтобы получить значение, которое я хотел.

Однако я не могу получить значение, используя делегат, который я написал.

- (void)chooseCat:(BButton *)sender 
{ 

    UIStoryboard *storyboard = [UIStoryboard 
    storyboardWithName:@"MainStoryboard_iPhone" bundle:nil]; 
    CategoryViewController *cat = 
    [storyboard instantiateViewControllerWithIdentifier:@"Cats"]; 
    SubCatsViewController *sub = 
    [storyboard instantiateViewControllerWithIdentifier:@"SubCats"]; 
    sub.delegate = self; //correct way? 
    [self.navigationController pushViewController:cat animated:YES]; 
} 

CategoryViewController.m 

- (void)tableView:(UITableView *)tableView didSelectRowAtIndexPath: 
(NSIndexPath *)indexPath 
{ 
    UIStoryboard *storeboard = 
    [UIStoryboard storyboardWithName:@"MainStoryboard_iPhone" bundle:nil]; 
    SubCatsViewController *sub = 
    [storeboard instantiateViewControllerWithIdentifier:@"SubCats"]; 
    sub.subCats = 
    [[self.cats objectAtIndex:indexPath.row] objectForKey:@"subcat"]; 
    [self.navigationController pushViewController:sub animated:YES]; 
} 
SubCatsViewController.h 

@protocol SubCatsDelegate <NSObject> 

- (void)didSelectSubCats:(SubCats *)cats; 

SubCatsViewController.m 

- (void)tableView:(UITableView *)tableView didSelectRowAtIndexPath: 
(NSIndexPath *)indexPath 
{ 
    UITableViewCell *cell = [tableView cellForRowAtIndexPath:indexPath]; 
    cell.accessoryType = UITableViewCellAccessoryCheckmark; 
    self.cat.catId = 
    [[self.subCats objectAtIndex:indexPath.row] objectForKey:@"id"]; 
    self.cat.name = 
    [[self.subCats objectAtIndex:indexPath.row] objectForKey:@"name"]; 
    if ([self.delegate respondsToSelector:@selector(didSelectSubCats:)]) { 
     [self.delegate didSelectSubCats:self.cat]; 
    } 
    [self dismissViewControllerAnimated:YES completion:nil]; 
} 
@end 

ответ

0

Документация dismissViewControllerAnimated: завершение: в UIViewController (от которого наследуется UINavigationController) говорит, что:

Представляющий-контроллер отвечает за отклоняя контроллер представления он представлен. Если вы вызовете этот метод на представленном контроллере представления, он автоматически пересылает сообщение в контроллер представления.

Это объясняет, почему SubCatsViewController (и только тот контроллер представления) уволен. Если RootViewController действительно ваш корневой контроллер представления можно изменить строку в Tableview: didSelectRowAtIndexPath: от

[self dismissViewControllerAnimated:YES completion:nil]; 

в

[self.navigationController popToRootViewControllerAnimated:YES]; 
+0

Это не-контроллер Корневой –

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