我只需要使用代码手动查看同一故事板文件中的UIView
控制器。我使用故事板制作所有表格和连接。我的应用程序从导航控制器开始,它使我能够访问UIView
(LoginViewController
),然后转到标签栏控制器,它提供4 UIViews
。根据每个UIView
我有.h
和.m
个文件。我知道segue方法,很简单,但我需要手动方法。也许我做错了什么。
我试图使用此方法在IBAction
中推送视图控制器:
[self.view pushViewController:LoginViewController animated:YES];
但它出错了:
意外的接口名称'LoginViewController':期望的表达式
花了很多时间才弄清楚出了什么问题,但我没有成功。
这是我的RollEnemyController.m
文件:
// 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
这是头文件:
// RollEnemyController.h
#import <UIKit/UIKit.h>
@interface RollEnemyController : UIViewController
- (IBAction)RollButtonPressed:(id)sender;
@property (weak, nonatomic) IBOutlet UIButton *AttackButtonPressed;
@end
答案 0 :(得分:108)
我猜你正在使用UINavigationController
。然后你可以这样做:
LoginViewController *controller = [[LoginViewController alloc] initWithNibName:@"LoginViewController" bundle:nil];
[self.navigationController pushViewController:controller animated:YES];
<强>更新强>
如果您使用的是UIStoryboard
,则可以设置新viewcontroller的标识符,然后将其推送到navigationController。要设置标识符,请选择视图,打开“属性”检查器,然后设置标识符(在我的示例中为“LoginIdentifier”)。然后你可以这样做:
LoginViewController *controller = [self.storyboard instantiateViewControllerWithIdentifier:@"LoginIdentifier"];
[self.navigationController pushViewController:controller animated:YES];
作为旁注,我看到你正在为你的方法使用大写字符。您可能应该尝试避免这种情况,而是在方法名称中使用降低的第一个字符。既然你说你正在学习Objective-C,你应该在SO link上查看这个很棒的主题。
更新2:
Here是一个zip文件,其中包含一个显示如何执行此操作的项目。 : - )
答案 1 :(得分:4)
你好试着使用这段代码
故事板放ID =“xxx *名称欲望” 标记使用StoryboarID
UIStoryboard * storyboard = self.storyboard;
DetailViewController * detail = [storyboard instantiateViewControllerWithIdentifier: @ "xxx * Name Desire"];
[self.navigationController pushViewController: detail animated: YES];
答案 2 :(得分:1)
在此声明中:
[self.view pushViewController:LoginViewController animated:YES];
您似乎正在尝试推送类。你应该推送一个对象,你的实际控制器:
LoginViewController* controller = [[LoginViewController alloc] init...];
[self.view pushViewController:controller animated:YES];
这至少会编译,如果所有其余的都没问题,也会给你第二个控制器。
编辑:
我错过了一点。您正在将视图控制器推送到视图。这没有任何意义,你应该将控制器推到导航控制器上:
<AppDelegate> *del = (AppDelegate*)[UIApplication sharedApplication].delegate;
[del.navigationController pushViewController:controller animated:YES];
至少,如果您是从基于导航的模板创建项目(这将创建一个带有对导航控制器的引用的应用程序委托),那么这是真的。否则,请提供有关如何创建导航控制器的详细信息。
答案 3 :(得分:1)
您在评论中提到您正在使用UIStoryboard
。你知道UIStoryboardSegue
吗?所有你必须控制 - 从按钮拖动到下一个视图控制器以建立segue。然后您可以选择过渡类型。请注意,您的视图控制器需要成为故事板中UINavigationController
的一部分才能执行“推送”动画。