【问题标题】:Custom segue push like with back button自定义 segue 推送,如后退按钮
【发布时间】:2012-08-03 04:03:13
【问题描述】:

我正在尝试构建我的自定义 segue,其行为类似于标准 Push segue,但在我的情况下,我想使用自定义按钮在屏幕之间切换(没有标签栏适合这个应用程序,任何模态 segue 都不适用也不错)。主屏幕是自定义图形,而要切换到的屏幕是地图。用户选择地图上的点,点击完成并返回主屏幕及其坐标。 我正在尝试将 ViewControllers 与自定义 segue 连接起来。

我在互联网上研究了很多解决方案,找到了一个合适的解决方案,但是代码分散在 ViewControllers 和 AppDelegate 周围(我不确定 Apple 是否会接受它)。我正在尝试将整个代码放入 CustomSegue.m /h。成功是部分的,因为使用技术(如下)它与第二个 ViewControler 相连,但我不知道如何关闭第二个并返回主屏幕。我尝试了各种技术,但是当我运行它时,编译器会以一堆错误终止应用程序。在构建和运行之前既没有错误也没有警告。我还尝试使用 [selfdismissModalViewControllerAnimated:YES] 使用按钮将其关闭;或 [self dismissViewControllerAnimated:YES 完成:nil];当我尝试模态序列但我的代码结果不佳时,它们会起作用。

有没有人对这样做的简洁方式提出建议。在过去的几天里,我一直在解决这个问题。我在很多应用程序中看到了这种转场,所以它似乎很流行,简单的解决方案。我对 Xcode 的经验并不多,只有几个月。 这是我的自定义 segue(带有 QuartzCore 动画)。

#import "CustomTabBarSegue.h"

@implementation CustomTabBarSegue


 -(void)perform {
    UIViewController *src = (UIViewController*)[self sourceViewController];
    UIViewController *dst = (UIViewController*)[self destinationViewController];

    UIView *currentView = src.view;
    UIView *theWindow = [currentView superview];
    UIView *newView = dst.view;
    [theWindow addSubview:newView];

    CATransition *transition = [CATransition animation];

    transition.delegate = self;
    transition.duration = 1;

    transition.timingFunction = [CAMediaTimingFunction functionWithName:kCAMediaTimingFunctionEaseInEaseOut];
    transition.type = kCATransitionMoveIn; 
    transition.subtype = kCATransitionFromRight;


    [[theWindow layer] addAnimation:transition forKey:@"MySegue"];
 }

@end

下面是我的按钮从destinationVC返回的代码。 (不工作)

- (IBAction)dismiss:(id)sender 

{

[self dismissViewControllerAnimated:YES completion:^() {
    [self performSegueWithIdentifier:@"MySegue" sender:self];
}];

}

【问题讨论】:

    标签: iphone ios xcode back-button segue


    【解决方案1】:

    我想我可能理解你想要做什么。如果我错了,请纠正我。您想转到一个视图,然后单击返回按钮返回。正确的?用故事板做到这一点很容易。将 NavigationController 作为初始视图,并将导航控制器的根视图控制器设置为主菜单。从那里你想做一个 PUSH segue,然后回去你想做一个 POP。

    调用 push segue 是调用 segue 的正常方式,但 pop 有点不同。弹出一个视图的代码是:[self.navigationController popViewControllerAnimated:YES];。弹回根视图控制器的代码是:[self.navigationController popToRootViewControllerAnimated:YES];

    我相信这就是你想要做的。无需自定义转场。

    【讨论】:

    • 抱歉,英语是我的第二语言,除此之外,我是 IOS 冒险的初学者阶段。我对您的回答的问题是:您所说的 Push 是否可以在没有顶栏的情况下构建。顶部栏会破坏整个效果。您是否可以发布一些代码或指向现成示例的链接?我将不胜感激。谢谢。
    • 如果你点击你在故事板中添加的导航控制器并进入它的设置,你可以取消选中显示顶部栏。
    • 真的很棒。太感谢了。看起来有时最困难的是最简单的解决方案。
    • 别忘了将此答案标记为正确,并给它评分!谢谢!
    猜你喜欢
    • 1970-01-01
    • 2013-04-02
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2012-02-19
    • 2013-09-20
    相关资源
    最近更新 更多