我有一个通用的UIViewController所有的uiviewscontroller都扩展了它来重用一些通用的操作。
我想在这个Common UIViewController上建立一个segue这样所有其他的UIViewController都会继承。
我想知道如何通过编程来实现。
我想这个问题也可能是我如何为我所有的uiviewcontroller设置segue而不需要进入故事板手工操作。
我有一个通用的UIViewController所有的uiviewscontroller都扩展了它来重用一些通用的操作。
我想在这个Common UIViewController上建立一个segue这样所有其他的UIViewController都会继承。
我想知道如何通过编程来实现。
我想这个问题也可能是我如何为我所有的uiviewcontroller设置segue而不需要进入故事板手工操作。
当前回答
对于故事板中的控制器。
Jhilgert00是你要找的东西吗?
-(IBAction)nav_goHome:(id)sender {
UIViewController *myController = [self.storyboard instantiateViewControllerWithIdentifier:@"HomeController"];
[self.navigationController pushViewController: myController animated:YES];
}
还是……
[self performSegueWithIdentifier:@"loginMainSegue" sender:self];
其他回答
根据定义,segue不能独立于故事板而存在。它甚至存在于类名中:UIStoryboardSegue。你不能通过编程方式创建segue——是故事板运行时为你创建它们。你通常可以在你的视图控制器代码中调用performSegueWithIdentifier:,但这依赖于在故事板中已经设置了一个segue来引用。
我认为你问的是如何在你的公共视图控制器(基类)中创建一个方法,它将转换到一个新的视图控制器,并将被所有派生类继承。你可以为你的基类视图控制器创建一个这样的方法:
- (IBAction)pushMyNewViewController
{
MyNewViewController *myNewVC = [[MyNewViewController alloc] init];
// do any setup you need for myNewVC
[self presentModalViewController:myNewVC animated:YES];
}
然后在你的派生类中,当适当的按钮被点击或表行被选中时调用那个方法。
我猜这个问题已经得到了回答和接受,但我只是想再补充一些细节。
我解决了一个问题,我将登录视图作为第一个屏幕,然后想要segue到应用程序,如果登录是正确的。我创建了从登录视图控制器到根视图控制器的segue并给它一个像myidentifier这样的标识符。
然后检查所有登录代码后,如果登录是正确的,我会打电话
[self performSegueWithIdentifier: @"myidentifier" sender: self];
我最大的误解是,我试图把segue放到一个按钮上,一旦找到segue就会中断。
我对UIStoryboard的segue进行了逆向工程,并做了一个开源(重新)实现:https://github.com/acoomans/Segway
有了这个库,就可以编程地定义segue(不需要任何故事板)。
希望能有所帮助。
实际上有几个问题:
首先,在你为我们上传的那个项目中,segue没有“segue1”标识符:
没有标识符
如果您还没有填写标识符,您应该填写。
第二,当你从表视图推到表视图时,你在调用initWithNibName来创建一个视图控制器。你需要使用instantiateViewControllerWithIdentifier。
你必须将你的代码链接到你正在使用的UIStoryboard。确保你进入UIStoryboard中的YourViewController,点击它周围的边框,然后设置它的标识符字段为你在代码中调用的NSString。
UIStoryboard *storyboard = [UIStoryboard storyboardWithName:@"MainStoryboard"
bundle:nil];
YourViewController *yourViewController =
(YourViewController *)
[storyboard instantiateViewControllerWithIdentifier:@"yourViewControllerID"];
[self.navigationController pushViewController:yourViewController animated:YES];