【问题标题】:Obtaining ViewController Identifier for "Back" UIButton no UINavigationController获取“返回”UIButton 没有 UINavigationController 的 ViewController 标识符
【发布时间】:2017-05-19 01:11:45
【问题描述】:

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

在创建我的应用程序时,我首先将 ViewControllers 从右侧的实用程序菜单部分拖到我的工作区中。然后,我从同一个菜单中添加了 UIButtons,并通过 Control+拖动了两者之间的模式连接(当按下按钮时,视图从一个控制器变为另一个控制器?)。我的经验主要是基于 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 的标识符。有没有更简单的方法?救命!

【问题讨论】:

    标签: ios objective-c uibutton viewcontroller


    【解决方案1】:

    首先,在 Xib 或 Storyboard 中为之前的 ViewController 定义类:

    这通常是需要的,您将进一步自定义前四个视图的活动。自定义视图控制器类应该继承自 UIViewController。

    那么,您可以通过以下代码控制弹出动作:

     - (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;
                }
            }
        }
    

    【讨论】:

    • FirstViewController 类、SecondViewController 类等是否特定于我的项目?收到错误“使用未声明的标识符 'FirstViewControllerClass'”
    • 将类更改为您为视图控制器 1、2、3、4 定义的类。等等,你没有为之前的 4 个视图控制器定义类?
    • 就像我说的,在启动项目以添加一个新的 ViewController 时,我只是从 Utilities 菜单中拖了一个。在 Indentity 检查器菜单中,所有四个 ViewController 都将类显示为“ViewController”。
    • 更改分配给每个 ViewController 的类是否会弄乱我现有的任何功能?
    • 不会。因为您直接使用了 UIViewController 类,这意味着您在这些控制器中还没有任何预先存在的功能。和其他类的已有功能,他们可以处理自定义视图控制器以及UIViewController。
    猜你喜欢
    • 2013-05-06
    • 1970-01-01
    • 2014-01-10
    • 1970-01-01
    • 1970-01-01
    • 2023-03-26
    • 1970-01-01
    • 1970-01-01
    • 2018-03-01
    相关资源
    最近更新 更多