我是iOS开发的新手。
我有一个带按钮的ViewController ViewController
。当用户按下该按钮时,我想将视图切换到RegisterViewController
。
ViewController.m
包含以下代码:
#import "ViewController.h"
#import "RegisterViewController.h"
@interface ViewController ()
@end
@implementation ViewController
@synthesize registerViewButton;
- (void)viewDidLoad
{
[super viewDidLoad];
// Do any additional setup after loading the view, typically from a nib.
}
- (void)didReceiveMemoryWarning
{
[super didReceiveMemoryWarning];
// Dispose of any resources that can be recreated.
}
- (IBAction)registerViewButtonClick:(id)sender {
NSLog(@"registerViewButtonClick called");
RegisterViewController* controller = [[RegisterViewController alloc] init];
[self.navigationController pushViewController:controller animated:YES];
}
@end
根据调试输出,当我按下按钮时,实际上调用了registerViewButtonClick方法。
但RegisterViewController表示的视图不会出现。
该应用程序的代码可用here。
当按下按钮时,我需要更改什么才能使RegisterViewController的视图变得可见?
答案 0 :(得分:2)
我运行了你的代码,发现你的代码中没有实现导航控制器,但是你试图推送registerViewController。尝试呈现如下的viewcontroller:
[self presentViewController:controller animated:YES completion:nil];
而不是
[self.navigationController pushViewController:controller animated:YES];
pushViewController
只有在有UINavigationController时才有效。根据文档,UINavigationController类实现了一个专门的视图控制器,用于管理分层内容的导航。因为,代码中没有UINavigationController(在这种情况下self.navigationController
是nil
),当您尝试推送viewController时没有任何反应。
当您想要维护一堆viewControllers时,UINavigationController也很方便,您可以根据需要推送或弹出。这也让你回归'按钮自动。如果您只需要提供一个viewcontroller,那么presentViewController:
可能是正确的选择。
答案 1 :(得分:1)
RegisterViewController* controller = [[RegisterViewController alloc] initWithNibName:@"RegisterViewController" bundle:nil]; [self.navigationController pushViewController:controller animated:YES];
答案 2 :(得分:0)
您可能需要使用nib名称初始化UIViewController ..
像这样 RegisterViewController* controller = [[RegisterViewController alloc] initWithNibName:@"RegisterViewController" bundle:nil];
答案 3 :(得分:0)
RegisterViewController *news=[[RegisterViewController alloc] initWithNibName:@"RegisterViewController" bundle:nil];
[self.navigationController pushViewController:news animated:YES];
[news release];
答案 4 :(得分:0)
如果您使用的是故事板,那么您需要从故事板中获取视图控制器,如
RegisterViewController *viewController = (RegisterViewController*)[[UIStoryboard storyboardWithName:@"MainStoryboard" bundle:nil] instantiateViewControllerWithIdentifier:@"vc-identifier"];
将vc-identifier
替换为您在故事板中作为标识符提供的内容,并将MainStoryboard
替换为storybaord的名称。
然后将其传递到导航控制器,就像您已经在做的那样,只要您的导航控制器不是nil
[self.navigationController pushViewController:controller animated:YES];
刚刚被告知您没有使用故事板,因为我的位置,我无法下载您的链接所以我提供了故事板的解决方案。我的建议是转向使用故事板。
将此留在此处,因为它可能会帮助其他遇到相同问题但正在使用故事板的人