在iOS 6中是否可以知道何时UIStoryboardSegue完成了转换?就像当我在navigationcontroler上添加一个UIStoryboardSeguefrom UIButton来推送另一个UIViewController时,我希望在推送转换完成后立即执行某些操作.
我的iPhone应用程序(使用swift构建)中有两个视图控制器,使用Xcode 6.1构建并使用故事板.
第一个视图控制器嵌入在故事板中的导航控制器中,第二个视图控制器的segue是"Show"segue.
运行应用程序时,它会在iOS 8.x中正确显示转换为推送,但在iOS 7.x中,它显示为没有导航栏的模式.
我的应用程序要求是将转换显示为推送,无论是iOS 7还是iOS 8.任何想法都可以在iOS的两个版本中实现推送?
我看到了一个提到这个问题的相关帖子,但是找不到问题的解决方案:故事板中的自适应segue Xcode 6.推送是否被弃用?
任何帮助表示赞赏......
谢谢
我正在尝试将应用程序从Objective-C转换为Swift,但我找不到如何使用Swift在视图之间传递数据.我的Objective-C代码是
UIStoryboard *storyBoard = [UIStoryboard storyboardWithName:@"Main" bundle:nil];
AnsViewController *ansViewController;
ansViewController = [storyBoard instantiateViewControllerWithIdentifier:@"ansView"];
ansViewController.num = theNum;
[self presentViewController:ansViewController animated:YES completion:nil];
Run Code Online (Sandbox Code Playgroud)
它正在做的是它基本上取变量theNum,并将其传递给另一个视图控制器上的变量num.我知道这可能是一个简单的问题,但我对Swift非常困惑,所以如果有人能解释他们如何将其改为Swift,我将不胜感激!
谢谢
基于斯坦福iOS课程,我正在使用模态视图控制器.在演示中,他们有一个按钮可以启动模态视图,当它被点击时,函数prepareForSegue被调用.我将代码和实现模仿到我的项目中,唯一的区别是我的演示是在iPhone故事板上,而他们的是在iPad上.
我注意到,当我的模态视图控制器出现时,它在此之前不会调用prepareForSegue.在查看prepareForSegue之前,我搜索了斯坦福项目,看看他们可以在哪里注册任何segue行为,但是没有证据.任何人都可以对此有所了解.我搜索了堆栈溢出,我发现所有用户都缺少performSegueWithIdentifier的调用实现.然而,在斯坦福大学的演示中他们从未这样做过.
- (void)prepareForSegue:(UIStoryboardSegue *)segue sender:(id)sender
{
if ([segue.identifier hasPrefix:@"Create Label"]) {
AskerViewController *asker = (AskerViewController *)segue.destinationViewController;
asker.question = @"What do you want your label to say?";
asker.answer = @"Label Text";
asker.delegate = self;
}
}
Run Code Online (Sandbox Code Playgroud)
这是故事板的一个例子:

这是我的故事板的一个例子:

在调试器中,当我停在斯坦福演示代码中时,调用堆栈显示故事板正在执行segue操作,我需要在故事板中配置什么才能获得相同的结果?

在Swift中,我有一个使用programmaticaly创建的按钮:
var button = UIBarButtonItem(title: "Tableau", style: .Plain, target: self, action: "tabBarTableauClicked")
Run Code Online (Sandbox Code Playgroud)
我希望当用户单击该按钮时,它会更改viewControllers.这是以下代码tabBarTableauClicked:
func tabBarTableauClicked(){
performSegueWithIdentifier("tableau", sender: self)
}
Run Code Online (Sandbox Code Playgroud)
但它显然不起作用,因为没有带有名为"tableau"的标识符的segue.
我无法使用Ctrl +单击按钮创建一个segue并拖动到第二个viewController,因为按钮是以编程方式创建的,而不是在Storyboard中创建的.
如何在Swift中以编程方式创建带有标识符的segue?
嗨我已经以编程方式创建了按钮,并将其连接到另一个视图,但我收到了segue警告
我应该使用prepareForSegue故事板的方法,但我不知道如何,互联网上有一些样本,但是当我使用该样本时我收到错误,请你帮我
这是我的代码
创建按钮
UIButton * button = [UIButton buttonWithType:UIButtonTypeCustom];
button.backgroundColor=[UIColor colorWithRed: 201.0/255.0 green: 201.0/255.0 blue:201.0/255.0 alpha: 1.0];
button.tag = currentTag;
currentTag++;
[button.layer setBorderColor: [[UIColor blackColor] CGColor]];
[button.layer setBorderWidth: 1.0];
[button setTitle:[NSString stringWithFormat:@"%d",currentTag] forState:UIControlStateNormal];
button.frame = CGRectMake(80*x, 32*y, 80, 32);
[button addTarget:self action:@selector(buttonPressed:) forControlEvents:UIControlEventTouchUpInside];
[buttonView addSubview: button];
Run Code Online (Sandbox Code Playgroud)
按钮动作
-(void)buttonPressed:(UIButton *)button
{
NSLog(@"button %u -- frame: %@", button.tag, NSStringFromCGRect(button.frame));
[self performSegueWithIdentifier:@"WeekView" sender:self];
}
Run Code Online (Sandbox Code Playgroud)
准备segue 我的警告
直接从视图控制器启动的Segues必须具有用于的标识符 - [UIViewController performSegueWithIdentifier:sender:]
- (void)prepareForSegue:(UIStoryboardSegue *)segue sender:(id)sender
{
if ([[segue identifier] isEqualToString:@"WeekView"]) { …Run Code Online (Sandbox Code Playgroud) 我试图使用自定义UIStoryboardSegue来实现两个视图控制器之间的转换.我可以通过子类化UIStoryboardSegue,然后在IB中设置此类来完成此操作.但是,我正在查看说:
如果您的segue不需要存储其他信息或提供除perform方法之外的任何信息,请考虑使用segueWithIdentifier:source:destination:performHandler:方法.
暗示您不需要创建自定义子类,只需使用自定义performHandler即可.
我很困惑这个代码应该去哪里,以及我如何使用它.我是否在IB中正常创建segue,然后在触发之前覆盖它(可能在shouldPerformSegue:或类似).在Apple的文档中,它说:
您的应用永远不会直接创建segue对象; 当触发segue时,它们总是由iOS代表您创建
所以我不太明白为什么他们会说使用类创建方法实例化segue.
我正在开发的iPad应用程序使用了Storyboard和segues.当用户点击主视图中的不同单元格时,我正在尝试显示不同的视图控制器.在参考不同的教程后,采取的步骤是 -
Storyboard,Master View Controller为表视图创建静态单元格并添加3个不同的行(即单元格1,单元格2,单元格3)View Controller,选中它并附加一个Navigation Controller(Editor- > Embed In- > Navigation Controller)Master View,我按住了ctrl键盘Navigation Controller.Segue Style"替换"和Destination"细节分割"我看到的结果是细节视图被替换.
但导航栏没有条形按钮项Master.
因此,我无法单击Master按钮,该按钮将显示包含单元格的表格,从中我可以导航到不同的视图.
我已经阅读了很多博客,并且看到过有关替换类似问题的segue的评论.然而,在使用故事板和segues时,似乎没有人遇到过这个特定问题.
从我的理解使用segues应该帮助我实现我想要的.从那些尝试过这种方法的人那里,任何正确方向的指针都会有所帮助.
我有一个viewController,通常(通常)使用push segue访问.这个viewController需要嵌入UINavigationController中.通常,这不是问题.push segue管理推送viewController,因此viewController有它的UINavigationController.
我的问题是,在少数情况下,我想使用模态segue呈现这个相同的viewController.当我这样做时,viewController没有嵌入到navigationController中.有没有办法用segues做到这一点?
我知道这可以通过创建UINavigationController纯粹在没有segue的代码中完成,将rootView设置为viewController,然后以模态方式呈现.这可以使用这样的代码完成:
MyViewController *viewController = [[MyViewController alloc] init];
UINavigationController *navController = [[UINavigationController alloc] initWithRootViewController:viewController];
[self presentModalViewController:navController animated:YES];
Run Code Online (Sandbox Code Playgroud)
但是我如何使用Segues做同样的事情呢?
为了进一步说明,这里有一些代码来补充我在prepareForSegue方法中使用接受的答案的方式.
使用模态瞄准时
- (void)prepareForSegue:(UIStoryboardSegue *)segue sender:(id)sender
{
if ([[segue destinationViewController] isEqualToString:@"Modal to MyVC"])
{
UINavigationController *nav = [segue destinationViewController];
MyViewController *vc = [nav topViewController];
//setup vc
}
}
Run Code Online (Sandbox Code Playgroud)
使用Push Segue时
- (void)prepareForSegue:(UIStoryboardSegue *)segue sender:(id)sender
{
if ([[segue destinationViewController] isEqualToString:@"Push to MyVC"])
{
MyViewController *vc = [segue destinationViewController];
//setup vc
}
}
Run Code Online (Sandbox Code Playgroud) 我在导航控制器中有视图控制器(root:RootViewController,second:)ReadingViewController,但在第二个视图控制器中我想禁用导航栏UIToolBar(因为我不需要标题,想要更多按钮,比如iBooks或者Facebook应用程序).问题是,当我在第二个视图中隐藏导航栏时,当我弹出视图控制器(返回)时,它会再次随机出现一秒钟.
当我弹出视图控制器时,后退按钮会出现一秒钟:

在第二个视图控制器中,我将导航栏隐藏在viewWillAppear::
- (void)viewWillAppear:(BOOL)animated {
[super viewWillAppear:animated];
[self.navigationController setNavigationBarHidden:YES animated:YES];
}
Run Code Online (Sandbox Code Playgroud)
同样在第二个视图控制器中,我恢复导航栏viewWillDisappear::
- (void)viewWillDisappear:(BOOL)animated {
[super viewWillDisappear:animated];
// ... other stuff
[self.navigationController setNavigationBarHidden:NO animated:YES];
}
Run Code Online (Sandbox Code Playgroud)
我想知道如何解决这个问题,以便视图控制器无缝过渡.
objective-c uinavigationbar uinavigationcontroller ios uistoryboardsegue