Ios SWRevealViewController-右视图控制器

Ios SWRevealViewController-右视图控制器,ios,objective-c,iphone,swift,swrevealviewcontroller,Ios,Objective C,Iphone,Swift,Swrevealviewcontroller,我正在使用在我的应用程序中实现两个侧面导航视图。我遵循故事板的方法,成功地实现了后视图和前视图。我试图通过故事板将右视图设置为与后视图完全相同,但无法实现 我已将显示视图控制器segue设置为“sw_right”,但它似乎未被-(void)prepareforsgue:(SWRevealViewControllerSegue*)segue sender:(id)sender识别,它被称为“sw_rear”和“sw_front” 我错过了什么? 你要求我看这条线 我没有故事板方面的经验 因此,我

我正在使用在我的应用程序中实现两个侧面导航视图。我遵循故事板的方法,成功地实现了后视图和前视图。我试图通过故事板将右视图设置为与后视图完全相同,但无法实现

我已将显示视图控制器segue设置为“sw_right”,但它似乎未被
-(void)prepareforsgue:(SWRevealViewControllerSegue*)segue sender:(id)sender
识别,它被称为“sw_rear”和“sw_front”

我错过了什么?


你要求我看这条线

我没有故事板方面的经验

因此,我将粘贴在我的项目中的代码下方,允许使用右侧。 看看我评论的那一节。希望这会让你走上正确的道路

祝你好运

- (BOOL)application:(UIApplication *)application didFinishLaunchingWithOptions:    (NSDictionary *)launchOptions
{
    UIWindow *window = [[UIWindow alloc] initWithFrame:[[UIScreen mainScreen] bounds]];
    self.window = window;

    FrontViewController *frontViewController = [[FrontViewController alloc] init];
    RearViewController *rearViewController = [[RearViewController alloc] init];

    UINavigationController *frontNavigationController = [[UINavigationController alloc] initWithRootViewController:frontViewController];
    UINavigationController *rearNavigationController = [[UINavigationController alloc] initWithRootViewController:rearViewController];

    SWRevealViewController *revealController = [[SWRevealViewController alloc] initWithRearViewController:rearNavigationController     frontViewController:frontNavigationController];
    revealController.delegate = self;

// THIS SECTION RIGHT BELOW IS PROBABLY WHAT YOU WANT TO LOOK AT
    RightViewController *rightViewController = rightViewController =     [[RightViewController alloc] init];
    rightViewController.view.backgroundColor = [UIColor greenColor];

    revealController.rightViewController = rightViewController;

    revealController.bounceBackOnOverdraw=NO;
    revealController.stableDragOnOverdraw=YES;

    self.viewController = revealController;

    self.window.rootViewController = self.viewController;
    [self.window makeKeyAndVisible];
    return YES;
}

这里是示例项目,这是工作良好,我为您自己制定的,下载链接是

下载项目后,如果您想删除该项目,请使用此链接

在这里,你需要右击前视图控制器,在特定视图控制器中添加
UIBarButtonItem

    @property (strong, nonatomic) IBOutlet UIBarButtonItem *rightIcon;   //this is for left bar button Item
    @property (nonatomic) IBOutlet UIBarButtonItem* revealButtonItem;  //this is for right bar button Item
并且添加了一些函数是
查看DidLoad

- (void)viewDidLoad
{
[super viewDidLoad];

 //action for left Swipe
[self.revealButtonItem setTarget: self.revealViewController];
[self.revealButtonItem setAction: @selector( revealToggle: )];
[self.navigationController.navigationBar addGestureRecognizer:  self.revealViewController.panGestureRecognizer];

//action for Right Swipe
[self.rightIcon setTarget: self.revealViewController];
[self.rightIcon setAction: @selector( rightRevealToggle: )];
[self.navigationController.navigationBar addGestureRecognizer: self.revealViewController.panGestureRecognizer];
}
Swift

override func viewDidLoad() {
super.viewDidLoad()
//action for left Swipe
self.revealButtonItem.target = self.revealViewController
self.revealButtonItem.action = "revealToggle:"
    self.navigationController.navigationBar.addGestureRecognizer(self.revealViewController.panGestureRecognizer)
//action for Right Swipe
self.rightIcon.target = self.revealViewController
self.rightIcon.action = "rightRevealToggle:"
    self.navigationController.navigationBar.addGestureRecognizer(self.revealViewController.panGestureRecognizer)
}

我知道问题出在哪里了。在
LoadStoryboard控制器中
方法
[self-PerformsgueWithIdentifier:SWSEGuerrightIdentifier发送方:nil]已被注释掉。如果我们实现右视图控制器,则必须取消注释。

在SWRevealViewController.m的435到444行之间存在一个try-catch条件。只需将语句重新排列如下

        [self performSegueWithIdentifier:SWSegueRightIdentifier sender:nil];
        [self performSegueWithIdentifier:SWSegueFrontIdentifier sender:nil];
        [self performSegueWithIdentifier:SWSegueRearIdentifier sender:nil];

现在,我的右菜单/右视图控制器正在工作,即使我没有使用左菜单/右视图控制器

你也可以按照沙德的建议去做。但如果你得到了一个正确的旗帜,你可以替换它

- (void)loadStoryboardControllers


if ( self.storyboard && _rearViewController == nil )
{
    //Try each segue separately so it doesn't break prematurely if either Rear or Right views are not used.
    @try
    {
        [self performSegueWithIdentifier:SWSegueRearIdentifier sender:nil];
    }
    @catch(NSException *exception) {}

    @try
    {
        [self performSegueWithIdentifier:SWSegueFrontIdentifier sender:nil];
    }
    @catch(NSException *exception) {}

    @try
    {
        [self performSegueWithIdentifier:SWSegueRightIdentifier sender:nil];
    }
    @catch(NSException *exception) {}
}


}

正如你所看到的,我把它注释掉了

//[self performSegueWithIdentifier:SWSegueRightIdentifier sender:nil];

因为这就是给你带来麻烦的人。如果是前部或后部,您也可以这样做

非常感谢您的帮助!我会试试看,让你知道!!这种方法是有效的。但是我通过故事板添加的视图不可见。知道为什么吗?我让它工作了。我已经回答了问题所在。非常感谢您的帮助:)关于这个问题,您有什么想法吗?您在nwI遇到了什么问题?我认为您没有滑动正确的视图控制器,correct@Anbu.Karthik我只是在使用工具栏按钮来显示和隐藏后视图和右视图。当我在故事板中将显示视图控制器segue id设置为
sw_right
时,未设置rightViewController。除了添加自定义segue之外,在故事板中还有什么我应该做的吗?任何想法ab此问题任何想法ab此问题@Anbu-我只是发现您提供的链接无法下载项目,请让我知道当SWreveal View controller不是您的初始视图时如何实现侧栏。当我推它的时候,它会在视图上方显示它自己的导航栏。有什么想法吗?这个问题有什么想法吗
 - (void)loadStoryboardControllers
{

//[self performSegueWithIdentifier:SWSegueRightIdentifier sender:nil];
[self performSegueWithIdentifier:SWSegueFrontIdentifier sender:nil];
[self performSegueWithIdentifier:SWSegueRearIdentifier sender:nil];

}
//[self performSegueWithIdentifier:SWSegueRightIdentifier sender:nil];