ios - 获取 "Back"UIButton 的 ViewController 标识符 no UINavigationController

标签 ios objective-c uibutton viewcontroller

作为一个整体,我对 Xcode 和 Objective-C 非常陌生。上周我开始了我的第一个编码项目/应用程序,但很快遇到了一个问题。

在创建我的应用程序时,我首先将 ViewControllers 从右侧的 Utilities 菜单部分拖到我的工作区中。然后,我从同一个菜单中添加了 UIButtons,并在按住 Control 的同时拖动了两者之间的模式连接(当按下按钮时, View 会从一个 Controller 变为另一个 Controller ?)。我的经验主要是基于 UI,很少编码。

我的问题:

我有 5 个 ViewController,每个都从 Utilities 菜单中单独拖动。根据我希望它们导航的顺序,其中四个由标题为“Next”和“Prev”的 UIButtons 链接。如果在任何时候,在任何给定的 ViewController 上按下了所有 ViewControllers 上的按钮,您将看到一个单独的“菜单”ViewController,它有一个“返回”UIButton。按下此按钮时,我希望 ViewController 切换回我之前按下“菜单”时所在的 4 个 VC 中的任何一个。所有的 ViewController 都在 ViewController 类中。

从逻辑上讲,这可以通过设置几个整数来完成:

@implementation ViewController

int buttonPressedHere = 0;

- (IBAction)view1menu:(id)sender{
    buttonPressedHere = 1;
}

- (IBAction)view2menu:(id)sender{
    buttonPressedHere = 2;
}

- (IBAction)view3menu:(id)sender{
    buttonPressedHere = 3;
}

- (IBAction)view4menu:(id)sender{
    buttonPressedHere = 4;
}

- (void)setPrevious{
    if(buttonPressedHere == 1)
        //insert code to return to previous ViewController 1
    if(buttonPressedHere == 2)
        //insert code to return to previous ViewController 2
    if(buttonPressedHere == 3)
        //insert code to return to previous ViewController 3
    if(buttonPressedHere == 4)
        //insert code to return to previous ViewController 4
}

@end

这里的问题是,我不知道如何获取要切换到的 ViewController 的标识符。有更容易的方法吗?帮助!

最佳答案

首先,在Xib 或Storyboard 中为之前的ViewControllers 定义类:enter image description here

这通常是需要的,您将进一步自定义前四个 View 的事件。自定义 View Controller 类应该继承自 UIViewController。

然后,您可以通过以下代码来控制弹出 Action :

 - (void)setPrevious {    
        if (buttonPressedHere == 1) {
            [self popToPreviousViewControllerWithClass:[FirstViewController class]];
        }
        else if (buttonPressedHere == 2) {
            [self popToPreviousViewControllerWithClass:[SecondViewController class]];
        }
        else if (buttonPressedHere == 3) {
            [self popToPreviousViewControllerWithClass:[ThirdViewController class]];
        }
        else if (buttonPressedHere == 4) {
            [self popToPreviousViewControllerWithClass:[FourthViewController class]];
        }
    }

    - (void)popToPreviousViewControllerWithClass:(Class)class {
        for (UIViewController *previousViewController in self.navigationController.viewControllers) {
            if ([previousViewController isKindOfClass:class]) {
                [self.navigationController popToViewController:previousViewController animated:YES];
                break;
            }
        }
    }

关于ios - 获取 "Back"UIButton 的 ViewController 标识符 no UINavigationController,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/44059956/

相关文章:

ios - 将委托(delegate)设置为对象

objective-c - 使用 UIControl(特别是 UIButton)时如何对目标进行排序?

ios - UITableViewController 自定义单元格中缺少 UIButton 默认点击淡入淡出动画

ios - 调用必须等待服务器响应的函数的问题

ios - 更改特定单元格的 UIButton

ios - iOS 7在内部称为振动(已更改!)?

objective-c - AVplayer 音频路由到扬声器和耳机

ios - Obj-C 中的委托(delegate)模式 - 我做错了吗?

ios - 第二个 View Controller 上的简单按钮崩溃应用程序/Swift

ios - 如何在 xcode 中使用自动布局设置图像的宽度和高度?