标签: segue

使用导航后退按钮展开segue

我已经通过展开segues部分观看了故事板实现的苹果演示视频,并在主视图上使用自定义按钮观看了演示.这很好.

我也看到了同样的事情的一个很好的例子也有效.http://www.techotopia.com/index.php/Using_Xcode_Storyboarding_%28iOS_6%29#Unwinding_Storyboard_Segues

但是,我希望有一个正常的推送segue从父(带有主窗体数据)传递到子(具有高级设置选项),然后使用导航栏中的后退按钮返回到父视图控制器,而不是使用自定义按钮视图中显示的视图.然后,当按下父控制器上的另一个保存按钮时,父控制器将所有内容保存到API服务器.

我似乎无法覆盖导航后退按钮将其指向我的展开segue动作,因为后退按钮没有出现在故事​​板上,我无法将绿色的"退出"按钮拖到它上面

我在viewDidLoad中尝试过这个来覆盖动作,但它没有用[self.navigationItem.backBarButtonItem setAction:@selector(unwindSegueAction :)];

是否可以使用后退按钮展开推送segue?

到目前为止我最好的想法是覆盖viewDidLoad方法中的后退按钮,但这会删除成角度的后退按钮样式,对于一个简单的问题看起来似乎是一个粗略的黑客

self.navigationItem.leftBarButtonItem = [[UIBarButtonItem alloc] initWithTitle:@"back" style:UIBarButtonItemStyleBordered target:self action:@selector(unwindSegue:)];
Run Code Online (Sandbox Code Playgroud)

我知道有使用协议和委托的答案,但我有兴趣使用Xcode4.5展开segue方法

xcode storyboard segue

31
推荐指数
3
解决办法
2万
查看次数

使用展开segue传递数据

我创建了两个视图控制器.我从第一个到第二个创建了一个segue来传递数据.现在我想将数据从第二个视图控制器传递到第一个视图控制器.我经历了许多类似的问题而我无法实现这些问题,因为我缺乏有关如何解开的知识.

ViewController.swift

class ViewController: UIViewController
{   
    var dataRecieved: String?
    @IBOutlet weak var labelOne: UILabel!
    @IBAction func buttonOne(sender: UIButton)
    {
        performSegueWithIdentifier("viewNext", sender: self)
    }
    override func prepareForSegue(segue: (UIStoryboardSegue!), sender: AnyObject!)
    {

        var svc: viewControllerB = segue.destinationViewController as! viewControllerB
        svc.dataPassed = labelOne.text
    }
}
Run Code Online (Sandbox Code Playgroud)

这会将数据传递给视图控制器"viewControllerB"中的dataPassed.说,现在我想将一些数据从viewControllerB传递到ViewController中的dataRecieved.如何只使用unwind segue而不是使用委托来完成此操作.我对迅捷很新,会很感激详细解释.

ios segue swift unwind-segue

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

是否可以手动执行Popover Segue(来自动态UITableView单元格)?

当用户触摸动态TableView中的单元格时,我需要执行Popover segue.但是,当我尝试使用此代码执行此操作时:

- (void)tableView:(UITableView *)tableview didSelectRowAtIndexPath:(NSIndexPath *)indexPath
{
        [self performSegueWithIdentifier:@"toThePopover" sender:[tableView cellForRowAtIndexPath]];
    //...
} 
Run Code Online (Sandbox Code Playgroud)

比我得到一个错误:

非法配置

Popover segue没有锚

有没有办法做到这一点(手动从动态TableView执行popover segue)?

uipopovercontroller ios segue

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

segue完成后如何执行一些代码?

在iOS 6中是否可以知道何时UIStoryboardSegue完成了转换?就像当我在navigationcontroler上添加一个UIStoryboardSeguefrom UIButton来推送另一个UIViewController时,我希望在推送转换完成后立即执行某些操作.

uiviewcontroller ios segue uistoryboardsegue ios6

30
推荐指数
3
解决办法
2万
查看次数

从一个故事板到一个不同的故事板?

我在一个故事板上有太多的观点,导致它运行得很慢.我被告知这个问题的解决方案是将一个故事板分成多个故事板.谁能告诉我如何通过按钮从故事板1的视图到故事板2中的视图?

xcode storyboard ios segue

29
推荐指数
6
解决办法
3万
查看次数

DestinationViewController Segue和UINavigationController swift

所以我有一个这样的prepareForSegue方法:

override func prepareForSegue(segue: UIStoryboardSegue, sender: AnyObject?) {
    if segue.identifier == "fromEventTableToAddEvent" {

        let addEventViewController: AddEventViewController = segue.destinationViewController as! AddEventViewController

        addEventViewController.newTagArray = newTagArray

    }
}
Run Code Online (Sandbox Code Playgroud)

但是,在运行时,应用程序崩溃并记录此消息:

无法转换'UINavigationController'类型的值

之所以出现错误,是因为addEventController嵌入在导航控制器中,但我不知道如何设置segue以便将destinationViewController设置为NavigationController,还允许我将prepareForSegue方法中的变量传递给addEventController

那我怎么用Swift呢?

我非常感谢您提供的帮助和时间作为回应.它有很多帮助

ios segue swift

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

在prepareForSegue完成之前调用的viewDidLoad

我认为viewDidLoad会在prepareForSegue结束后被调用.这就是Hegarty如何教他的斯坦福大学课程(最近在2013年2月).

但是,今天我第一次注意到,在READForSegue完成之前调用了viewDidLoad.因此,我在prepareForSegue中设置的属性不可用于目标viewDidLoad方法中的destinationViewController.

这似乎与预期的行为相反.

UPDATE

我只知道发生了什么事.在我的destinationViewController中,我有一个自定义setter,每次更新"model"时都会重新加载tableView:

DestinationViewController    
- (void)setManagedObjectsArray:(NSArray *)managedObjectsArray
    {
        _managedObjectsArray = [managedObjectsArray copy];
        [self.tableView reloadData];
    }
Run Code Online (Sandbox Code Playgroud)

事实证明,因为destinationViewController是UITableViewController的子类...调用'self.tableView'会强制加载视图.根据Apple的文档,调用视图控制器的view属性可以强制加载视图.UITableViewController的视图是tableView.

http://developer.apple.com/library/ios/#documentation/uikit/reference/UIViewController_Class/Reference/Reference.html

因此,在prepareForSegue中,以下行强制加载destinationViewController的视图:

vc.managedObjectsArray = <custom method that returns an array>;
Run Code Online (Sandbox Code Playgroud)

为了解决这个问题,我将destinationViewController模型的自定义setter更改为:

- (void)setManagedObjectsArray:(NSArray *)managedObjectsArray
    {
        _managedObjectsArray = [managedObjectsArray copy];
        if ([self isViewLoaded]) {
            [self.tableView reloadData];
        }
    }
Run Code Online (Sandbox Code Playgroud)

如果tableView在屏幕上,这将只重新加载tableView.因此,在prepareForSegue期间不强制加载视图.

如果有人反对这个过程,请分享您的想法.否则,我希望这可以防止一个人长时间不眠之夜.

storyboard viewdidload ios segue

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

只有在添加第三个segue时,才会在didSelectRowAtIndexPath之前调用prepareForSegue

我有3个segues到3个不同的视图.2实现没有问题,是在创建第三个问题时.

我有以下didSelectRowAtIndexPath方法:

- (void)tableView:(UITableView *)tableView didSelectRowAtIndexPath:(NSIndexPath *)indexPath{
    NSLog(@" ----------  did select row");

    if(indexPath.section == 0){
        if(indexPath.row == [self.data count]-1){
            //prior to adding this, everything works
            [self performSegueWithIdentifier:@"MoreComments" sender:self];
        }else{
            [self performSegueWithIdentifier:@"FriendView" sender:friend];
        }
    }else if(indexPath.section == 1){
        if(indexPath.row == [self.data2 count]-1){
            [self performSegueWithIdentifier:@"MorePosts" sender:self];
        }else{
            [self performSegueWithIdentifier:@"FriendView" sender:friend];
        }
    }
}
Run Code Online (Sandbox Code Playgroud)

我有以下prepareForSeque方法:

-(void) prepareForSegue:(UIStoryboardSegue *)segue sender:(id)sender{
    if([segue.identifier isEqualToString:@"MorePosts"]){
        MorePostsViewController *mfamvc = segue.destinationViewController;
        mfamvc.data = self.data;
    }else if([segue.identifier isEqualToString:@"FriendView"]){
        FriendViewController *fvc = segue.destinationViewController;
        fvc.friend = friend;
    }else if([segue.identifier isEqualToString:@"MoreComments"]){
          MoreCommentsViewController *mcvc …
Run Code Online (Sandbox Code Playgroud)

interface-builder storyboard didselectrowatindexpath ios segue

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

在popover segues中使用的Anchor和Passthrough是什么?

在Xcode中,Popover segue有两个名为Anchor和Passthrough的连接字段.它们用于什么? 图片

xcode storyboard ios segue

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

ios在segue期间将值传递给另一个视图

试着做一些我见过很多地方记录的事情,但似乎无法管理.我想在segue期间将数据从一个视图传递到另一个视图.

这是源视图中的prepareForSegue方法:

- (void) prepareForSegue:(UIStoryboardSegue *)segue sender:(id)sender
{

    //pass values
DetailViewController *dest = (DetailViewController *)[segue destinationViewController];

dest.locTitle = [value valueForKeyPath:@"title"];
dest.locInfo = [value valueForKeyPath:@"info"];



// NSLog(@"The title is: %@, and the info is: %@.",dest.locTitle,dest.locInfo);

}
Run Code Online (Sandbox Code Playgroud)

如果我最后启用NSLog,我会看到正确的值...

这是目标视图上的接口:

#import <UIKit/UIKit.h>

@interface DetailViewController : UIViewController{

}

@property (strong, nonatomic) NSString *locTitle;
@property (strong, nonatomic) NSString *locInfo;
@property (weak, nonatomic) IBOutlet UILabel *detailMainText;
@property (weak, nonatomic) IBOutlet UILabel *detailTitle;

@end
Run Code Online (Sandbox Code Playgroud)

...这里是目标视图上的viewDidLoad和相关的@synthesize:

@synthesize detailMainText,detailTitle,locTitle,locInfo;

- (void)viewDidLoad
{
[super viewDidLoad];
NSLog(@"In viewDidLoad - …
Run Code Online (Sandbox Code Playgroud)

ios uistoryboard segue

27
推荐指数
2
解决办法
3万
查看次数