标签: segue

故事板,UIViewController和UISplitViewController

试图为iPad制作基于故事板的应用程序.在其中我需要从开始屏幕(UIViewController)转换到主屏幕(UISplitViewController)然后转换到全屏视图(再次UIViewController).

我在网上看到了很多讨论(至少有几个 - 关于stackoverflow),说明UISplitViewController不能在基于Storyboard的应用程序中以任何其他方式使用,而不是RootViewController.一些线程包含解决方法,还有替代splitview(https://github.com/mattgemmell/MGSplitViewController)来处理这个问题.

但我无法理解的是,为什么Apple文档恰恰相反.这是Apple iOS 5.0库中章节的链接.它指出:


使用故事板创建拆分视图控制器

要将拆分视图控制器添加到应用程序的故事板:

  1. 打开应用程序的主要故事板.
  2. 将拆分视图控制器拖出库.这还为分割视图控制器的两个窗格创建视图控制器.
  3. 对于每个拆分视图控制器包含的视图控制器,使用标识检查器设置视图控制器的类名称.

要显示拆分视图界面,​​请执行以下操作之一:

  • 通过选择场景并选中"属性"检查器下的"是初始视图控制器"框,将其显示为第一个场景.
  • 通过向其添加模态segue,从另一个场景中显示它.
  • 通过调用performSegueWithIdentifier:sender:方法以编程方式显示它以启动模态segue.

我在很多方面尝试过它,但最后两个语句中描述的方法从未奏效.modal segue和performSegue都失败了,众所周知的错误:

"***由于未捕获的异常'NSInvalidArgumentException'终止应用程序,原因:'应用程序试图以模态方式呈现拆分视图控制器......"

有人能够解释一下吗?这是XCODE/iOS 5.0中的错误还是文档中的错误?

此致,彼得

storyboard uiviewcontroller uisplitviewcontroller segue

15
推荐指数
1
解决办法
8988
查看次数

如何在tableView中找到tapPath附件按钮的indexPath

UITableView有一个部分和几行简单.当用户单击单元附件按钮(与之连接时detailsSegue.我想知道它是什么单元格行.所以我可以从我的数组中选择正确的对象并将其分配给下一个视图中的变量.

我已经使用委托方法tableview:accessoryButtonTappedForRowWithIndexPath:并将indexPath值分配给我的私有属性myRow.比在prepareForSegue:sender:方法中我使用我的self.myRow.row值从数组中选择正确的对象.

我的问题是这两种方法似乎执行顺序错误.从NSLog我可以看到该prepareForSegue:sender:方法首先执行,我的委托方法正在改变self.myRow它之后的值.

因此,prepareForSegue:sender:方法总是将错误的对象传递给下一个视图(之前被点击的视图).

对不起,我的英国人.提前感谢您的帮助.

-(void)tableView:(UITableView *)tableView accessoryButtonTappedForRowWithIndexPath:(NSIndexPath *)indexPath {
    self.myRow = indexPath;
    NSLog(@"tapped button at row: %i",self.myRow.row); 
}

-(void)prepareForSegue:(UIStoryboardSegue *)segue sender:(id)sender {
    if([segue.identifier isEqualToString:@"addSegue"]) {
        AddViewController *avc = segue.destinationViewController;
        avc.delegate = self;
    }
    else if ([segue.identifier isEqualToString:@"detailsSegue"]) {
        NSLog(@"Segue row: %i",self.myRow.row);
        Annotation *annotation = [self.viewsList objectAtIndex:self.myRow.row];
        NSLog(@"Segue annotation object: %@",annotation.title);
        DetailsViewController *dvc = segue.destinationViewController;
        dvc.wikiKey = annotation.title;
    }
}
Run Code Online (Sandbox Code Playgroud)

objective-c uitableview ios segue

15
推荐指数
1
解决办法
1万
查看次数

放松segue不工作

我目前正在从Apple的开始开发iOS应用程序中完成教程.

在Tutorial:Storyboards页面(上面的链接)上,我被告知要为两个视图制作自定义类.为简单起见,我将其称为表视图(具有表)和添加视图(具有用于向表添加项的文本字段).

表视图有一个链接按钮打开添加视图,添加视图的导航栏上有两个按钮:取消和完成.

有人告诉我unwindToList在Add View的.m文件中写一个空方法:

- (IBAction)unwindToList:(UIStoryboardSegue *)segue
{

}
Run Code Online (Sandbox Code Playgroud)

然后我被告知将"取消"和"完成"按钮链接到"场景基座"中的"退出"项目(请参见底部的图像),然后选择方法unwindToList.因此,正如教程中引用的那样,这应该是应该发生的:

现在,运行您的应用程序.在启动时,您会看到一个表视图 - 但其中没有数据.您可以单击"添加"按钮并从[表格视图]导航到[添加视图].您可以单击取消和完成按钮以导航回[表格视图]."

但是,当我单击取消或完成时,根本没有任何反应.我确定两者都是联系在一起的.

提前致谢!

教程图片

objective-c ios segue

15
推荐指数
1
解决办法
9978
查看次数

如何在使用自适应segue时获得对UIPopoverController的引用?

在我的iOS 7应用程序中,我通过此检入检测到segue是否为popover prepareForSegue:

if ([segue isKindOfClass:[UIStoryboardPopoverSegue class]])
Run Code Online (Sandbox Code Playgroud)

但是现在我正在使用自适应segues,现在作为Popover segue在上面的检查中不再返回true.这是因为segue不再是a UIStoryboardPopoverSegue,而是它UIStoryboardPopoverPresentationSegue.但是,人们不能简单地添加这个Presentation词,因为那里没有定义.

什么是检测segue何时是自适应segue的弹出窗口的适当方法,而不是全屏模式演示?

而且,你如何获得iOS 8的popover参考?以下是我正在为iOS 7做的事情,但同样因为它不会UIStoryboardPopoverSegue导致崩溃.

UIPopoverController *popover = ((UIStoryboardPopoverSegue *)segue).popoverController;
popover.popoverContentSize = CGSizeMake(380, 1000);
Run Code Online (Sandbox Code Playgroud)

objective-c uipopovercontroller ios segue uistoryboardsegue

15
推荐指数
2
解决办法
3399
查看次数

在显示新视图之前,iOS segue冻结了几秒钟

在我的应用程序的主视图中,我有一个表视图和两个原型单元格.我使用故事板为每个单元配置了segue.在视图控制器中,我覆盖prepareForSegue以将所选单元格上的信息传递到目标视图.

目标视图不是特别复杂,当然也不需要任何繁重的处理来加载.

问题

当我第一次点击主控制器中的单元格时,目标视图会在长时间延迟后显示,从5到40秒.

编辑#2:后续的点击通常更快

注意:

  • 如果在目标视图出现之前再次点击同一单元格,则会触发目标视图立即显示.
  • 如上所述,但是点击不同的单元格会导致视图立即显示,但会显示来自第一个单元格的数据.
  • 如上所述,但是点击不同的控件(没有关联的segues)会触发目标视图立即显示.
  • 随后的"轻敲"通常表现出较少的延迟.
  • Time Profiler - 我能看到的 - 表明在那么多秒的延迟期间绝对没有发生任何事情.
  • 我尝试过不同类型的segue,但没有区别
  • 一些println显示以下事件序列发生:

    • 在主视图中,执行prepareForSegue(没有延迟)
    • 然后执行目标viewDidLoad(没有延迟)
    • ......长时间拖延......
    • 目标控制器中的集合和表视图开始调用与数据源相关的方法以从控制器获取数据.
    • 视图终于出现了(带有不需要的动画,BTW,但这是一个不同的问题)

根据我在这个主题上的内容,我怀疑这个问题可能与后台线程中发生的一些上述操作有关.

知道我可能做错了什么吗?

编辑#1:添加了一些代码

在主视图控制器中,segue已使用故事板链接(CTRL-将两个原型单元拖动到目标视图中).

代码看起来有点像下面:

override func prepareForSegue(segue: UIStoryboardSegue, sender: AnyObject?)
{
    var assetIndex = assetsTable.indexPathForSelectedRow()?.row

    println("prepare for segue - start: \(assets[assetIds[assetIndex!]]!.Name)")

    if let destination = segue.destinationViewController as? AssetThingsListViewController
    {
        destination.bundlesRepository = bundlesRepository!
        destination.asset = assets[assetIds[assetIndex!]]
    }

    println("prepare for segue - end")
}
Run Code Online (Sandbox Code Playgroud)

编辑#3我在BitBucket上提供了一个示例项目

uiviewcontroller ios segue uistoryboardsegue swift

15
推荐指数
1
解决办法
4630
查看次数

通过故事板逆转自定义搜索

我有一个自定义segue动画,当将新的视图控制器推入堆栈时发生.然而,当弹出与所述自定义segue一起呈现的视图控制器时,默认导航控制器动画发生(即,当父视图控制器从左边缘在屏幕上翻译时,当前视图控制器向右动画).

所以我的问题是:有没有办法编写一个自定义的pop segue动画,当从视图控制器弹出堆栈时会发生这种情况?

编辑(解决方案):

我最终定义了一个类似于所选答案的自定义segue.在Storyboard中,我将一个自定义segue从子视图控制器拖回到它的父级,给它一个标识符,新写的反向segue作为它的类.是的,我意识到它几乎与模态转换相同.客户要求需要这种疯狂,所以在任何人发表评论之前,要明白我知道在正常情况下不应该这样做.

- (void)perform {
  UIViewController *src = (UIViewController *)self.sourceViewController;
  UIViewController *dest = (UIViewController *)self.destinationViewController;

  [UIView animateWithDuration:0.3 animations:^{
    CGRect f = src.view.frame;
    f.origin.y = f.size.height;
    src.view.frame = f;

  } completion:^(BOOL finished){
    src.view.alpha = 0;
    [src.navigationController popViewControllerAnimated:NO];
  }];
}
Run Code Online (Sandbox Code Playgroud)

reverse objective-c storyboard ios segue

14
推荐指数
1
解决办法
2万
查看次数

ios如何从单一视图分割到分割视图控制器

我有两个模板视图(一个是单个视图,另一个是拆分视图控制器)每个单独工作正常.所以我在单视图上放了一个按钮,然后在按钮上输入Push Segue,转到Split View Controller.当我按下按钮时,我发现一个崩溃,说不能从外部UI导航控制器使用Push.

好的,我将单个视图模板放入UI导航控制器,它现在说:拆分视图控制器无法推送到导航控制器.

那么......我该怎么做?

谢谢 !

ios segue ios7

14
推荐指数
3
解决办法
1万
查看次数

PerformSegueWithIdentifier不起作用

我正在尝试使用use self.performSegueWithIdentifier来远程加载JSON文件时更改Storyboard上的视图.为此,我使用Swift类"Agent"来执行HTTP请求.当我写作时,一切都在运作

self.performSegueWithIdentifier("toView2", sender: self)
Run Code Online (Sandbox Code Playgroud)

超出"完成"变量.为什么不起作用?我想这与"发件人:自我"有关.但我不知道如何解决这个问题.我在Xcode上没有任何错误.它只是从我的服务器加载数据然后没有任何反应......

    @IBAction func goToView2(sender: AnyObject) {
    let done = { (response: NSHTTPURLResponse!, data: Agent.Data!, error: NSError!) -> Void in
        self.namesJSON = JSONValue(data!)
        self.performSegueWithIdentifier("toView2", sender: self)
    };
    Agent.post("http://api.example.com/test.php", headers: [ "Header": "Value" ],
        data: [ "test": "ok" ], done: done)
}
Run Code Online (Sandbox Code Playgroud)

agent ios segue swift

14
推荐指数
1
解决办法
7455
查看次数

iOS故事板呈现Segues"关系,嵌入,推送,模态,自定义"类型

我有一个基本的想法,推动和模态segues做什么.Push用于导航控制器segues,Modal是我迄今为止用于基本segue到另一个View Controller的默认设置.我认为"模态"意味着没有别的东西可以继续/打断segue?

自定义segues我猜是最灵活/可定制/动画.

我不知道"关系"和"嵌入"segues的作用.请告诉我!

谢谢.

xcode objective-c storyboard ios segue

14
推荐指数
1
解决办法
7216
查看次数

Swift:在Modal中强制显示导航栏

我的Swift项目中有以下Storyboard Segue:

在此输入图像描述

动画是正确的,但目标视图控制器中没有导航栏.我想强制目标视图控制器有一个导航栏.我在目标视图控制器中尝试过:

override func viewWillAppear(animated: Bool) {
    super.viewWillAppear(true)
    navigationController?.navigationBar.hidden = false
}
Run Code Online (Sandbox Code Playgroud)

要么:

override func viewWillAppear(animated: Bool) {
    self.navigationController?.setNavigationBarHidden(false, animated: true)
}
Run Code Online (Sandbox Code Playgroud)

但它拒绝显示任何导航栏.

如何执行垂直segue(如"Cover Vertical")但仍在目标视图控制器中显示半透明导航栏?

编辑:目标视图控制器的我的属性检查器:

在此输入图像描述

uistoryboard segue uistoryboardsegue swift

14
推荐指数
1
解决办法
1万
查看次数