0

我在我的应用程序中使用 ECSlidingViewController 来实现 Facebook 风格的滑动效果。我有 2 个 TopViewController,一个左侧视图控制器和一个右侧视图控制器以及一个 initviewcontroller,它是一个滑动视图控制器子类。

1. InitViewController:ECSlidingViewController

2.主视图控制器(TopViewController)

3.LeftMenuViewContrller(UIViewController)

4.RightMenuViewController(UIViewController)

5.DetailViewController(顶视图控制器)

我的 MainViewController 上有包含日历事件的 tableview。问题是我想通过单击tableView:didSelectRowAtIndexPath:方法中的事件将 MainViewController 转到 DetailViewController来显示事件详细信息,这是另一个带有一些动画的顶视图控制器(到目前为止我无法获得)。我正在使用以下代码让我进入 DetailViewController

- (void)tableView:(UITableView *)tableView didSelectRowAtIndexPath:(NSIndexPath *)indexPath {   
 DetailsViewController *newTopViewController = [self.storyboard instantiateViewControllerWithIdentifier:@"details"];
    self.slidingViewController.topViewController = newTopViewController;
    [self.slidingViewController resetTopView];
}

这是我的 viewDidLoad 方法

 - (void)viewDidLoad
{
    [super viewDidLoad];
    // Do any additional setup after loading the view.
    
    self.view.layer.shadowOpacity = 0.75f;
    self.view.layer.shadowRadius = 10.0f;
    self.view.layer.shadowColor = [UIColor blackColor].CGColor;
    
    if (![self.slidingViewController.underLeftViewController isKindOfClass:[LeftViewController class]]) {
        self.slidingViewController.underLeftViewController  = [self.storyboard instantiateViewControllerWithIdentifier:@"Left"];
    }
    
    if (![self.slidingViewController.underRightViewController isKindOfClass:[RightViewController class]]) {
        self.slidingViewController.underRightViewController = [self.storyboard instantiateViewControllerWithIdentifier:@"Right"];
    }
    
    [self.view addGestureRecognizer:self.slidingViewController.panGesture];
    
}

我想获得 UINavigationController 或 Modal 样式的动画

[self.navigationController pushViewController:newTopViewController animated:YES];

或者

[self presentViewController:newTopViewController animated:YES completion:nil];

请帮忙。谢谢你。

4

1 回答 1

0

你在使用故事板吗?你能表演一个Segue吗?在情节提要中,将名称、链接和样式设置为模态以及过渡。

在你的 DidSelectRowAtIndex 把这个

[self performSegueWithIdentifier:@"eventDetail" sender:@(indexPath.row)];

然后声明这个方法

-(void)prepareForSegue:(UIStoryboardSegue *)segue sender:(id)sender
{
    if([segue.identifier isEqualToString:@"eventDetail"])
    {
        DetailsViewController *destViewController = segue.destinationViewController;
        destViewController.eventRow = sender;
    }
    // You can test for other Segue names here
}

然后在 DetailsViewController.h 中放

// Allows sending View Controller to give this controller data
@property (nonatomic, strong) int *eventRow;

在 .m 中

@synthesize eventRow;

现在在您的 DetailsViewController 中,它应该对其进行动画处理,并且滑动将被禁用(除非您将所有 ECS 位声明为正常)。您还有一个 Int eventRow,它告诉您单击了哪个单元格。

您可以创建一个后退按钮并执行此操作;

[self dismissViewControllerAnimated:YES completion:nil];

编辑

或者你可以试试这个,但我不确定它是否会动画加上你需要弄清楚如何传递东西,也许是两者的结合......

UIViewController *newTopViewController = [self.storyboard instantiateViewControllerWithIdentifier:@"eventDetail"];

CGRect frame = self.slidingViewController.topViewController.view.frame;
self.slidingViewController.topViewController = newTopViewController;
self.slidingViewController.topViewController.view.frame = frame;
[self.slidingViewController resetTopView];
于 2013-07-23T16:11:28.377 回答