ios - 如何从该 segue 或目标 View Controller 访问执行 segue 的源 View ?

标签 ios swift segue

我有一个自定义 ContainerSegue 继承自 UIStoryboardSegue。在 perform() 方法中,我需要访问执行当前 segue 的 UIView。我怎样才能做到这一点?可能吗?

In other words I need to access the sender within perform() method.

最佳答案

segue 类通常不会跟踪 sender,但是由于您已经定义了一个名为 的自定义 segue 类ContainerSegue,你可以给它添加一个sender属性:

class ContainerSegue: UIStoryboardSegue {
    // Add this property to hold the sender
    var sender: AnyObject?

    override func perform() {
        if let button = sender as? UIButton, title = button.currentTitle {
            print("button title is \(title)")
        }

        // Add remainder of perform code here
    }
}

然后在 prepareForSegue 中设置:

override func prepareForSegue(segue: UIStoryboardSegue, sender: AnyObject?) {
    if let containerSegue = segue as? ContainerSegue {
        containerSegue.sender = sender
    }
}

类似的,如果要访问destinationViewController中的sender,在destinationViewController中添加一个sender属性 并在 prepareForSegue 中设置:

override func prepareForSegue(segue: UIStoryboardSegue, sender: AnyObject?) {
    if let dvc = segue.destinationViewController as? MyDestinationVC {
        dvc.sender = sender
    }
}

关于ios - 如何从该 segue 或目标 View Controller 访问执行 segue 的源 View ?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/38914846/

相关文章:

ios - 枚举值 'NSFetchedResultsChangeMove' 和 NSFetchedResultsChangeUpdate' 未在开关中处理

iphone - 通过在后台线程上渲染 UIWebView 创建 UIImage - iPhone

swift - 计算属性不需要存储分配

ios - 为什么 MKMapView 将用户位置显示为图钉?

iOS Swift 转场

ios - prepareForSegue :sender: fails to alter property on destination VC

ios - 用于在页面上显示的 UIPageViewControlerDataSource 和 UiWebView

ios - dyld : Library not loaded: @rpath/XCTest. 框架/XCTest

ios - 从 Storyboard图像连接到 SpriteKit 场景

ios - UITableView 在 reloadData 上向上滚动