关于iphone:如何在故事板中手动切换UIViewControllers?

How can I manually switch between UIViewControllers in storyboard?

我只需要用代码手动查看同一个故事板文件中的UIView控制器。我使用故事板制作所有形式和连接。我的应用程序从导航控制器开始,它提供了我对UIView的访问(LoginViewController的访问),然后转到标签栏控制器,它提供了4个UIViews。根据每个UIView文件,我都有.h.m文件。我知道Segue方法,它很简单,但我需要手动方法。也许我做错了什么。

我试着用这个方法来推动IBAction中的视图控制器:

1
[self.view pushViewController:LoginViewController animated:YES];

但它犯了一个错误:

Unexpected interface name ‘LoginViewController’: expected expression

我花了很多时间才弄清楚是什么问题,但我没有成功。这是我的RollEnemyController.m文件:

1
2
3
4
5
6
7
8
9
10
11
12
//  RollEnemyController.m
#import"RollEnemyController.h"
#import"LoginViewController.h"
@implementation RollEnemyController;
@synthesize AttackButtonPressed;

- (IBAction)AttackButtonPressed:(id)sender {
    LoginViewController* controller = [[LoginViewController alloc] initWithNibName:@"LoginViewController"  bundle:nil];
    [self.view pushViewController:controller];
}

@end

这是头文件:

1
2
3
4
5
6
7
8
9
10
//  RollEnemyController.h

#import <UIKit/UIKit.h>

@interface RollEnemyController : UIViewController

- (IBAction)RollButtonPressed:(id)sender;
@property (weak, nonatomic) IBOutlet UIButton *AttackButtonPressed;

@end


我猜你用的是UINavigationController。然后你可以这样做:

1
2
LoginViewController *controller = [[LoginViewController alloc] initWithNibName:@"LoginViewController" bundle:nil];
[self.navigationController pushViewController:controller animated:YES];

更新:

如果使用的是UIStoryboard,则可以设置新的viewcontroller的标识符,然后将其推送到导航控制器上。要设置标识符,请选择视图,打开属性检查器,然后设置标识符(在我的示例中为"loginidentifier")。然后你可以这样做:

1
2
LoginViewController *controller = [self.storyboard instantiateViewControllerWithIdentifier:@"LoginIdentifier"];
[self.navigationController pushViewController:controller animated:YES];

作为旁注,我看到您的方法使用大写字符。您可能应该尽量避免这种情况,而应该在方法名称中使用低首字符。既然你说你在学习Objective-C,那么你应该在这里查看一下这个很棒的主题:so:link。

更新2:

这是一个zip文件,其中有一个项目显示如何执行此操作。-)


你好,试着用这个代码

故事板放置id="xxx*name desire"标记使用Storyboarid

1
2
3
4
5
UIStoryboard * storyboard = self.storyboard;

DetailViewController * detail = [storyboard instantiateViewControllerWithIdentifier: @"xxx * Name Desire"];

[self.navigationController pushViewController: detail animated: YES];


你在评论中提到你正在使用UIStoryboard。你知道UIStoryboardSegue吗?你只需要控制从按钮拖动到下一个视图控制器就可以建立一个segue。然后可以选择过渡类型。请注意,视图控制器必须是故事板中UINavigationController的一部分,才能执行"推"动画。


在本声明中:

1
[self.view pushViewController:LoginViewController animated:YES];

看来你在努力推动一门课。你应该推一个对象,你的实际控制器:

1
2
LoginViewController* controller = [[LoginViewController alloc] init...];
[self.view pushViewController:controller animated:YES];

这至少可以编译,如果其余的都可以,还可以提供第二个控制器。

编辑:

我漏了一分。您正在将视图控制器推到视图上。这毫无意义,您应该将控制器推到导航控制器上:

1
2
<AppDelegate> *del = (AppDelegate*)[UIApplication sharedApplication].delegate;
[del.navigationController pushViewController:controller animated:YES];

至少,如果您是从基于导航的模板(它创建了一个引用导航控制器的应用程序委托)创建项目的,这是正确的。否则,请提供有关如何创建导航控制器的详细信息。