获取 ViewController "Back" UIButton 的标识符 no UINavigationController
Obtaining ViewController Identifier for "Back" UIButton no UINavigationController
作为一个整体,我对 Xcode 和 Objective-C 还是很陌生。上周我开始了我的第一次编码 project/app,我 运行 遇到了一个快速的问题。
在创建我的应用程序时,我首先将 ViewControllers 从右侧的“实用程序”菜单部分拖到我的工作区中。然后我从同一个菜单中添加 UIButtons 并按住 Control 键并拖动两者之间的模式连接(当按下按钮时,视图从一个控制器变为另一个控制器?)。我的经验主要是 UI 基础,很少编码。
我的问题:
我有 5 个 ViewController 分别从“实用工具”菜单中拖出。根据我希望它们导航的顺序,其中四个由标题为 "Next" 和 "Prev" 的 UI 按钮链接。如果在任何时候,在任何给定的 ViewController 上按下所有 ViewControllers 上的按钮,您将看到一个单独的 "Menu" ViewController,其中有一个 "Back" UI按钮。按下此按钮时,我希望 ViewController 切换回我之前按下 "Menu." 时打开的 4 个 VC 中的任何一个 ViewController s 在 class 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定义class:
这通常是需要的,您将进一步自定义前面四个视图的活动。自定义视图控制器 class 应该继承自 UIViewController。
然后,您可以通过以下代码来控制pop动作:
- (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;
}
}
}
作为一个整体,我对 Xcode 和 Objective-C 还是很陌生。上周我开始了我的第一次编码 project/app,我 运行 遇到了一个快速的问题。
在创建我的应用程序时,我首先将 ViewControllers 从右侧的“实用程序”菜单部分拖到我的工作区中。然后我从同一个菜单中添加 UIButtons 并按住 Control 键并拖动两者之间的模式连接(当按下按钮时,视图从一个控制器变为另一个控制器?)。我的经验主要是 UI 基础,很少编码。
我的问题:
我有 5 个 ViewController 分别从“实用工具”菜单中拖出。根据我希望它们导航的顺序,其中四个由标题为 "Next" 和 "Prev" 的 UI 按钮链接。如果在任何时候,在任何给定的 ViewController 上按下所有 ViewControllers 上的按钮,您将看到一个单独的 "Menu" ViewController,其中有一个 "Back" UI按钮。按下此按钮时,我希望 ViewController 切换回我之前按下 "Menu." 时打开的 4 个 VC 中的任何一个 ViewController s 在 class 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定义class:
这通常是需要的,您将进一步自定义前面四个视图的活动。自定义视图控制器 class 应该继承自 UIViewController。
然后,您可以通过以下代码来控制pop动作:
- (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;
}
}
}