我有一个通用的UIViewController所有的uiviewscontroller都扩展了它来重用一些通用的操作。
我想在这个Common UIViewController上建立一个segue这样所有其他的UIViewController都会继承。
我想知道如何通过编程来实现。
我想这个问题也可能是我如何为我所有的uiviewcontroller设置segue而不需要进入故事板手工操作。
我有一个通用的UIViewController所有的uiviewscontroller都扩展了它来重用一些通用的操作。
我想在这个Common UIViewController上建立一个segue这样所有其他的UIViewController都会继承。
我想知道如何通过编程来实现。
我想这个问题也可能是我如何为我所有的uiviewcontroller设置segue而不需要进入故事板手工操作。
当前回答
我想澄清一下……
一个常见的误解,事实上我有一段时间了,故事板segue是由prepareForSegue:sender:方法触发的。事实并非如此。不管你是否为那个(离开)视图控制器实现了prepareForSegue:sender:方法,storyboard segue都会执行。
这是我从Paul Hegarty在iTunesU的精彩讲座中学到的。很抱歉,我不记得是哪节课了。
如果你在故事板中的两个视图控制器之间连接了一个segue,但是没有实现prepareForSegue:sender:方法,这个segue仍然会segue到目标视图控制器。但它会毫无准备地segue到那个视图控制器。
希望这能有所帮助。
其他回答
你必须将你的代码链接到你正在使用的UIStoryboard。确保你进入UIStoryboard中的YourViewController,点击它周围的边框,然后设置它的标识符字段为你在代码中调用的NSString。
UIStoryboard *storyboard = [UIStoryboard storyboardWithName:@"MainStoryboard"
bundle:nil];
YourViewController *yourViewController =
(YourViewController *)
[storyboard instantiateViewControllerWithIdentifier:@"yourViewControllerID"];
[self.navigationController pushViewController:yourViewController animated:YES];
你可以创建UIStoryBoardSegue的子类。子类化主要用于提供自定义过渡动画。
你可以看到wwdc 2011介绍StoryBoard的视频。YouTube上也有。
http://developer.apple.com/library/ios/#documentation/UIKit/Reference/UIStoryboardSegue_Class/Reference/Reference.html#//apple_ref/occ/cl/UIStoryboardSegue
我一直在使用这段代码来实例化我的自定义segue子类并以编程方式运行它。这似乎很有效。这有什么问题吗?我很困惑,看到所有其他的答案都说这是不可能的。
UIViewController *toViewController = [self.storyboard instantiateViewControllerWithIdentifier:@"OtherViewControllerId"];
MyCustomSegue *segue = [[MyCustomSegue alloc] initWithIdentifier:@"" source:self destination:toViewController];
[self prepareForSegue:segue sender:sender];
[segue perform];
故事板segue不能在故事板之外创建。尽管有一些缺点,但您需要将其连接起来。
UIStoryboardSegue Reference明确指出:
你不能直接创建segue对象。相反,是故事板 运行时必须在两个视图之间执行segue时创建它们 控制器。类型仍然可以以编程方式启动segue performSegueWithIdentifier:sender: UIViewController的方法 想要的东西。您可以这样做,以从添加的源启动一个segue 因此在接口生成器中不可用。
你仍然可以通过编程的方式告诉故事板使用presentModalViewController:或pushViewController:animated:调用的segue来呈现一个视图控制器,但是你需要一个故事板实例。
你可以调用UIStoryboards类方法来获得一个命名的故事板,它带有主bundle的nil。
情节提要名称:捆绑包:
我想澄清一下……
一个常见的误解,事实上我有一段时间了,故事板segue是由prepareForSegue:sender:方法触发的。事实并非如此。不管你是否为那个(离开)视图控制器实现了prepareForSegue:sender:方法,storyboard segue都会执行。
这是我从Paul Hegarty在iTunesU的精彩讲座中学到的。很抱歉,我不记得是哪节课了。
如果你在故事板中的两个视图控制器之间连接了一个segue,但是没有实现prepareForSegue:sender:方法,这个segue仍然会segue到目标视图控制器。但它会毫无准备地segue到那个视图控制器。
希望这能有所帮助。