创建委托以从菜单更改视图

时间:2013-07-06 14:19:02

标签: ios objective-c cocoa-touch ios5 delegates

我希望能够从我的自定义菜单中将视图控制器推送到我的主要子类导航控制器,我想使用委托来完成它。在我尝试更改视图控制器之前,我更方便了,更改当前视图控制器标题。 这是我到目前为止编写的代码,但是对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;
}

1 个答案:

答案 0 :(得分: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:消息(例如设置导航控制器的标题)。