Tia*_*oso 201 objective-c ios segue
我有一个共同点UIViewController,我所有的UIViewsControllers扩展都重用了一些常见的操作.
我想在这个"Common"上设置一个segue,UIViewController以便所有其他的UIViewControllers继承.
我试图找出如何以编程方式执行此操作.
我想这个问题也可能是如何在没有进入故事板的情况下segue为我所有人设置一个UIViewControllers并且手动完成.
smi*_*Bot 346
我想我会增加另一种可能性.您可以做的一件事是,您可以使用未附加到操作的segue连接故事板中的两个场景,然后以编程方式触发视图控制器内的segue.您这样做的方法是,您必须从故事板场景底部的文件所有者图标(即segueing场景)拖动,然后右键拖动到目标场景.我会投入一张图片来帮助解释.
弹出窗口将显示"Manual Segue".我选择Push作为类型.点击小方块,确保您在属性检查器中.给它一个标识符,用于在代码中引用它.

好的,接下来我将使用程序化的条形按钮项目进行segue.在viewDidLoad或其他地方,我将使用以下代码在导航栏上创建一个按钮项:
UIBarButtonItem *buttonizeButton = [[UIBarButtonItem alloc] initWithTitle:@"Buttonize"
style:UIBarButtonItemStyleDone
target:self
action:@selector(buttonizeButtonTap:)];
self.navigationItem.rightBarButtonItems = @[buttonizeButton];
Run Code Online (Sandbox Code Playgroud)
好的,请注意选择器是buttonizeButtonTap:.因此,为该按钮编写一个void方法,在该方法中,您将调用segue,如下所示:
-(void)buttonizeButtonTap:(id)sender{
[self performSegueWithIdentifier:@"Associate" sender:sender];
}
Run Code Online (Sandbox Code Playgroud)
调用prepareForSegue时,需要sender参数来标识按钮.prepareForSegue是一种框架方法,您将实例化场景并将其传递给它所需的任何值.这是我的方法的样子:
- (void)prepareForSegue:(UIStoryboardSegue *)segue sender:(id)sender
{
if ([[segue identifier] isEqualToString:@"Associate"])
{
TranslationQuizAssociateVC *translationQuizAssociateVC = [segue destinationViewController];
translationQuizAssociateVC.nodeID = self.nodeID; //--pass nodeID from ViewNodeViewController
translationQuizAssociateVC.contentID = self.contentID;
translationQuizAssociateVC.index = self.index;
translationQuizAssociateVC.content = self.content;
}
}
Run Code Online (Sandbox Code Playgroud)
好的,只是测试它,它的工作原理.希望它能帮到你.
jon*_*oll 168
根据定义,segue不能独立于故事板而存在.它甚至以班级的名义出现:UIStoryboardSegue.您不能以编程方式创建segues - 它是为您创建它们的storyboard运行时.您通常可以调用performSegueWithIdentifier:视图控制器的代码,但这依赖于已在故事板中设置segue以供参考.
我想您要问的是如何在公共视图控制器(基类)中创建一个将转换为新视图控制器的方法,并将由所有派生类继承.您可以通过向基类视图控制器创建类似这样的方法来完成此操作:
- (IBAction)pushMyNewViewController
{
MyNewViewController *myNewVC = [[MyNewViewController alloc] init];
// do any setup you need for myNewVC
[self presentModalViewController:myNewVC animated:YES];
}
Run Code Online (Sandbox Code Playgroud)
然后在派生类中,在单击相应按钮或选择表行或其他任何内容时调用该方法.
Jea*_*let 80
我一直在使用这段代码来实例化我的自定义segue子类并以编程方式运行它.它似乎工作.这有什么不对吗?我很困惑,阅读所有其他答案,说它无法完成.
UIViewController *toViewController = [self.storyboard instantiateViewControllerWithIdentifier:@"OtherViewControllerId"];
MyCustomSegue *segue = [[MyCustomSegue alloc] initWithIdentifier:@"" source:self destination:toViewController];
[self prepareForSegue:segue sender:sender];
[segue perform];
Run Code Online (Sandbox Code Playgroud)
qri*_*kko 45
猜猜这是回答和接受的,但我只是想补充一些细节.
我做了什么来解决一个问题,我将登录视图作为第一个屏幕呈现,然后如果登录正确则想要转到应用程序.我从登录视图控制器创建了segue到根视图控制器,并给它一个像"myidentifier"这样的标识符.
然后检查所有登录代码后,如果登录正确,我会打电话
[self performSegueWithIdentifier: @"myidentifier" sender: self];
Run Code Online (Sandbox Code Playgroud)
我最大的误解是我试图将segue放在一个按钮上,一旦发现它就会中断segue.
Jef*_*mes 32
您必须将代码链接到UIStoryboard您正在使用的代码.确保你进入YourViewController在你的UIStoryboard,点击它周围的边框,然后将其设置identifier字段添加到NSString您在代码中调用.
UIStoryboard *storyboard = [UIStoryboard storyboardWithName:@"MainStoryboard"
bundle:nil];
YourViewController *yourViewController =
(YourViewController *)
[storyboard instantiateViewControllerWithIdentifier:@"yourViewControllerID"];
[self.navigationController pushViewController:yourViewController animated:YES];
Run Code Online (Sandbox Code Playgroud)
小智 16
对于故事板中的控制器.
jhilgert00这是你要找的?
-(IBAction)nav_goHome:(id)sender {
UIViewController *myController = [self.storyboard instantiateViewControllerWithIdentifier:@"HomeController"];
[self.navigationController pushViewController: myController animated:YES];
}
Run Code Online (Sandbox Code Playgroud)
要么...
[self performSegueWithIdentifier:@"loginMainSegue" sender:self];
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
204255 次 |
| 最近记录: |