GVKun编程网logo

Swift 2到3的prepareForSegue迁移(swift transfer)

10

对于Swift2到3的prepareForSegue迁移感兴趣的读者,本文将提供您所需要的所有信息,我们将详细讲解swifttransfer,并且为您提供关于iOS>>prepareForSegue>

对于Swift 2到3的prepareForSegue迁移感兴趣的读者,本文将提供您所需要的所有信息,我们将详细讲解swift transfer,并且为您提供关于iOS >> prepareForSegue >> IBOutlet更新不起作用?、IOS Swift prepareForSegue 视图页面跳转、ios – prepareForSegue和代表、ios – prepareForSegue未从自定义uitableviewcell调用的宝贵知识。

本文目录一览:

Swift 2到3的prepareForSegue迁移(swift transfer)

Swift 2到3的prepareForSegue迁移(swift transfer)

这个问题可能已经回答了,但我找不到。

override func prepareForSegue(segue: UIStoryboardSegue, sender: AnyObject?) {}

这段代码在swift 2中工作正常,但是现在给我一个错误,以删除替代。

确切的错误:“方法不会覆盖其超类中的任何方法”

快速3的新正确方法是什么? 我似乎在任何地方都找不到任何文档。

答案1

小编典典

在Swift 3.0中更改了方法签名

取代这个

 override func prepareForSegue(segue: UIStoryboardSegue, sender: AnyObject?) {

 override func prepare(for segue: UIStoryboardSegue, sender: Any?) {

iOS >> prepareForSegue >> IBOutlet更新不起作用?

iOS >> prepareForSegue >> IBOutlet更新不起作用?

我正在尝试从prepareForSegue方法中的第一个VC更新第二个VC中的Label.
-(void)prepareForSegue:(UIStoryboardSegue *)segue sender:(id)sender
{
    MYSecondViewController* secondVC = (MYSecondViewController*)segue.destinationViewController;
    secondVC.titleLabel.text = @"First VC Says: You Are Second!!"; //This doesn't work
    secondVC.dataPassstring = @"First VC Says: You Are Second!!"; //This works + secondVC viewDidLoad
}

如果我直接更新Label,它就不起作用.
如果我更新一个字符串属性,然后将其分配给第二个VC viewDidLoad中的标签,它确实有效.

这是否意味着在prepareForSegue调用后第二个VC viewDidLoad方法尚未被调用?

是否调用了一些init方法(因此Nsstring对象可以通过)?如果是的话,哪一个?

有没有办法从第一个VC更新第二个VC中的IBOutlets?

解决方法

简短的回答是:不要这样做.

您应该将另一个视图控制器的视图视为私有,并且永远不要尝试操纵它们.它打破了封装的OOD原则.

您要做的是将(字符串或其他类型)属性添加到目标视图控制器,并在prepareForSegue中设置THOSE.然后在目标视图控制器的viewWillAppear方法中,将这些属性值复制到视图控制器的视图中.

在您的情况下,datePassstring属性正是您想要的.

这样,如果您在路上更改第二个视图控制器的结构,并决定将信息显示到其他视图,则不会断开2个视图控制器之间的链接.您的目标视图控制器仍然可以从其源中获取数据,并使用它执行不同的操作.

附:正如另一张海报所说,设置secondVC.titleLabel.text失败的原因是在prepareForSegue中,目标视图控制器的视图尚未加载.

IOS Swift prepareForSegue 视图页面跳转

IOS Swift prepareForSegue 视图页面跳转

override func prepareForSegue(segue: UIStoryboardSegue, sender: AnyObject!) {

         if segue.identifier == "goToCollection" {

            let viewController:CollectionViewController = segue.destinationViewController as CollectionViewController    //目标视图、页面

            viewController.setSegueParams(txtName.text, desc: txtDesc.text)

        }

    }


ios – prepareForSegue和代表

ios – prepareForSegue和代表

我有一个应用程序与两个部分.在其中一个区段中,当前视图控制器成为一个委托,另一个不是.
- (void)prepareForSegue:(UIStoryboardSegue *)segue sender:(id)sender
{
    if ([segue.identifier isEqualToString:@"MoreOptions"]) {
        UINavigationController *navigationController = segue.destinationViewController;
        MoreOptionsViewController *controller = (MoreOptionsViewController *)navigationController.topViewController;
        controller.delegate = self;
    } else if ([segue.identifier isEqualToString:@"FullStoryView"]) {
        SingleStoryViewController *detailViewController = segue.destinationViewController;
        detailViewController.urlObject = sender;
    }
}

所有这一切都很好,但我想更好地尝试了解代码.我不明白的是,我必须通过从navigationController.topViewController获取参考,而不是像在第二个if条件中那样从segue.destinationViewController中获取它,从而获得对MoreOptionsViewController的引用.是因为我将当前视图控制器(self)设置为代理?再次,我不是想解决一个问题,只是想更好地了解发生了什么.

解决方法

看看你的故事板,应该明白为什么会这样.您在UINavigationController中嵌入了MoreOptionsViewController,并将一个segue连接到导航控制器,从而使其成为destinationViewController.这是很常见的.

ios – prepareForSegue未从自定义uitableviewcell调用

ios – prepareForSegue未从自定义uitableviewcell调用

我有一个自定义TableViewController与自定义TableViewCell.我在故事板上创建了一个segue,从Cell到另一个ViewController来显示细节,但是从未调用prepareForSegue.我已经尝试过使用didSelectRowAtIndexPath但它没有被调用.我怀疑这可能是因为我动态创建了自定义单元格并且它们没有从分配给它们的故事板中获取segue,但我找不到这样做的方法.我的BarButtonItem中的“newSegue”被正常调用.
override func prepareForSegue(segue: UIStoryboardSegue!,sender: AnyObject!) {
    println("PREPARE FOR SEGUE")
    if segue.identifier == "newSegue" {
        println("PREPARE FOR NEW SEGUE")
    } else if segue.identifier == "detailSegue" {
        println("PREPARE FOR DETAIL SEGUE")
    }
}

override func tableView(tableView: UITableView!,didSelectRowAtIndexPath indexPath: NSIndexPath!) {
    println("You selected cell!")
}

我怀疑在定义自定义单元格时可能会出错:

override func tableView(tableView: UITableView,cellForRowAtIndexPath indexPath: NSIndexPath) -> UITableViewCell {

    let CellIndentifier: Nsstring = "ListPrototypeCell"

    var cell : MyTableViewCell = tableView.dequeueReusableCellWithIdentifier(CellIndentifier) as MyTableViewCell

    var myClass: MyClass = self.myList.objectAtIndex(indexPath.row) as MyClass

    cell.setCell(author: myClass.author,message: myClass.message)

    return cell

}

有帮助吗?

解决方法

从InterfaceBuilder中的TableViewController拖动se​​gue,而不是从单元格拖动.然后,您可以通过performSegueWithIdentifier在didSelectRowAtIndexPath中使用其标识符执行segue.

还要检查功能签名.不再需要隐式展开的选项的感叹号:

func tableView(tableView: UITableView,didSelectRowAtIndexPath indexPath: NSIndexPath) {
    let cell = tableView.cellForRowAtIndexPath(indexPath)
    tableView.deselectRowAtIndexPath(indexPath,animated: true)
    performSegueWithIdentifier("mySegue",sender: cell)
}

override func prepareForSegue(segue: UIStoryboardSegue,sender: AnyObject?) {
}

今天的关于Swift 2到3的prepareForSegue迁移swift transfer的分享已经结束,谢谢您的关注,如果想了解更多关于iOS >> prepareForSegue >> IBOutlet更新不起作用?、IOS Swift prepareForSegue 视图页面跳转、ios – prepareForSegue和代表、ios – prepareForSegue未从自定义uitableviewcell调用的相关知识,请在本站进行查询。

本文标签: