【问题标题】:how can a UILongPressGestureRecognizer change the present view to another View Controller?UILongPressGestureRecognizer 如何将当前视图更改为另一个视图控制器?
【发布时间】:2014-05-17 13:14:27
【问题描述】:

如何以编程方式从我的第一个视图控制器更改为我的第二个视图控制器,它在情节提要中链接到情节提要中的第一个?

我的 iPad 故事板有一个标签栏控制器作为“初始视图控制器”, 它通过“关系序列视图控制器”链接 导航控制器,它通过“根视图”链接链接到视图控制器 A,它有一个 UIButton,它通过“手动序列推送”链接到视图控制器 B。

Tab Bar Cntrl => Navigation Cntrlr ==(root view)==> View Cntrl A, UIButton ==(push)==> View Cntrl B

因此,当运行时,显示视图控制器 A,按下其 UIButton 会导致视图更改为视图控制器 B。

View Controller A 上的 UITableView 单元格上还有另一个 UIButton。当我按住此按钮时,UILongPressGestureRecognizer 的委托触发正常,我现在需要 View Controller B 作为视图。

那么如何从视图控制器 A 更改为视图控制器 B? 在 VC B 打开的情况下,如何改回 VC A?

响应长按的代表............ - (void)schedule_long_press_delegate:(UILongPressGestureRecognizer *)recognizer { 如果(recognizer.state == UIGestureRecognizerStateEnded){ printf("长按结束 .................... \n");

    // Get storyboard:
    UIStoryboard *mainStoryboard = [UIStoryboard storyboardWithName:@"MainStoryboard_iPad"
                                                             bundle: nil];
    printf("mainStoryboard = %x \n", (int)mainStoryboard ); // !!! ax

    // Get nav controller for MANAGE view:
    UINavigationController *MANAGE_UINavigationController = (UINavigationController*)[mainStoryboard 
                        instantiateViewControllerWithIdentifier: @"MANAGE_Storyboard_ID"];
    printf("MANAGE_UINavigationController = %x  \n", (int)MANAGE_UINavigationController ); // !!! ax


    // Get MANAGE view's view controller:
    SCHEDULE_UIViewController *schedule_UIViewController = [self.storyboard instantiateViewControllerWithIdentifier:
                                        NSStringFromClass([SCHEDULE_UIViewController class])];
    printf("schedule_UIViewController = %x  \n", (int)schedule_UIViewController ); // !!! ax

    // Change screen to MANAGE view:
    [MANAGE_UINavigationController  pushViewController: schedule_UIViewController animated:YES];
}
else {
    printf("Long press detected .....................   \n");
}        

}

故事板设置: UITabBarController ...情节提要 ID 为空白。 ..链接到: UINavigationController ... Class=UINavigationController StoryboardID = "MANAGE_Storyboard_ID" ..链接到: UIViewController ... Class=acc StoryboardID 为空白(初始视图) ..链接到: UIViewController ... Class & StoryboardID = "SCHEDULE_UIViewController" (TARGET VIEW)

输出:........

mainStoryboard = 1f8b4900
MANAGE_UINavigationController = 1e5d45f0
schedule_UIViewController 2 = 1e5d4b20

【问题讨论】:

    标签: ios iphone objective-c uiviewcontroller uinavigationcontroller


    【解决方案1】:

    在长按手势识别器的委托方法中,您可以从如下代码推送视图控制器 B:

    ViewControllerB *viewControllerB = [self.storyboard instantiateViewControllerWithIdentifier:NSStringFromClass([ViewControllerB class])];
    [self.navigationController pushViewController:viewControllerB animated:YES];
    

    您可以根据需要使用不同的标识符;使用类名只是我的偏好。

    导航控制器将为您处理更改回视图控制器 A。用户将在左上角看到一个返回按钮。

    【讨论】:

    • 还是不行。所以,我现在得到了故事板,得到了导航控制器,得到了目标视图控制器,所有的点都设置好了,做推送:没有效果!
    • 我的故事板的初始视图是标签栏。这有关系吗?标签栏 --> nav cntrl --> 查看 cntrl A --> 查看 cntrl B。我在 A 时长按按钮,想去 B,但没有任何反应。
    • 你说的是视图控制器在故事板中的故事板标识符吗?确保通过在情节提要编辑器中选择视图控制器(不是其子视图之一),单击身份检查器,并确保“类”和“情节提要 ID”字段都设置为“SCHEDULE_UIViewController”(不带引号) .
    • 是的,它们是:view cntrl B (target) Storyboard ID = Class = class name = "SCHEDULE_UIViewController"。 View Cntrl 没有设置 Storyboard ID,因为我没有引用它。我用所有这些故事书细节和代码更新了问题。
    • 视图cntrl B是否需要在push之前提前实例化或初始化?
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2019-07-03
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2016-09-02
    • 2013-03-06
    相关资源
    最近更新 更多