2013-07-06 4 views
0

Я хочу, чтобы иметь возможность нажимать контроллеры представлений на мой основной подклассифицированный контроллер навигации из моего пользовательского меню, и я хочу сделать это с помощью делегата. Прежде чем я попытаюсь изменить контроллеры представлений, я пошел на что-то проще, чтобы изменить текущий заголовок контроллера. Это код, который я написал до сих пор, но запись на ячейку TableView не вызовет делегата. (Или так кажется)Создание делегата для изменения представлений из меню

Пожалуйста посоветуйте

    -> RootViewController 
       /     \ 
      Container    Container  
       |       | 
    SlideMenuViewController  SubClassed UINavigationController 
       |       | | | | 
    UITableViewController    VC1 VC2 VC3 VC4 


SlideMenuViewController.h:

@protocol SlidingMenuDelegate <NSObject> 

@end 

@interface SlideMenuViewController : UIViewController 
{ 
     id <SlidingMenuDelegate> delegate; 
} 
@property (strong, nonatomic) id delegate; 

SlideMenuViewController.m:

- (void)tableView:(UITableView *)tableView didSelectRowAtIndexPath:(NSIndexPath *)indexPath 
{ 
    //do something to send controller 

    ((UIRTLNavigationController *)(self.delegate)).titleForView.text = @"test"; 
} 

MyNavigationController.h:

@interface MyNavigationController : UINavigationController <UINavigationControllerDelegate> 

@property (nonatomic, strong) UILabel *titleForView; 

MyNavigationController.m:

- (void)showRightMenu 
{ 
... 
... 
//Some animation to slide the menu out 

    //Delegate stuff 
    //Get the storyboard's instance. 
    UIStoryboard *storyBoard = [UIStoryboard storyboardWithName:@"MainStoryboard" bundle:[NSBundle mainBundle]]; 

    SlideMenuViewController *slideMenuVC; 

    //Get the viewcontrollers instance from the storyboard's instance 
    slideMenuVC = [storyBoard instantiateViewControllerWithIdentifier:@"slideMenuSID"]; 
    slideMenuVC.delegate = self; 
} 
+0

Где находится делегат? Почему в протоколе нет определений методов? Свойства делегата обычно не должны быть «сильными». Отладка или добавление некоторого кода регистрации, чтобы увидеть, что это происходит, когда ячейка таблицы выбрана. – Wain

ответ

0

Ваш протокол SlidingMenuDelegate нуждается в некоторых (необязательно) методы, такие как slidingMenu:didSelectOption:. Кроме того, я бы определил перечисление или что-то, что задает все параметры, которые предоставляет меню.

Тогда в вашем методе tableView:didSelectRowAtIndexPath:, вы могли бы сделать

if ([self.delegate respondsToSelector:@selector(slidingMenu:didSelectOption:)]) { 
    SlidingMenuOption option; 

    switch (indexPath.row) { 
    case 0: 
     option = SlidingMenuFooOption; 
     break; 

    case 1: 
     option = SlidingMenuBarOption; 
     break; 

    // ... 
    } 

    [self.delegate slidingMenu:self didSelectOption:option]; 
} 

Наконец, ваш делегат будет делать что-то в ответ на это slidingMenu:didSelectOption: сообщения (например, установить заголовок навигационного контроллера).

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