如何从 viewController2 上的按钮对 viewController1 执行操作?

Posted

技术标签:

【中文标题】如何从 viewController2 上的按钮对 viewController1 执行操作?【英文标题】:How to execute an action on viewController1 from a button on viewController2? 【发布时间】:2015-12-20 09:53:19 【问题描述】:

所以我有 viewcontroller1,我有一个 UIScrollview 让它移动。我有一个Home 按钮,按下该按钮可将滚动视图移动到所需位置。 这部分工作正常。

import UIKit

class ViewController: UIViewController 

    @IBAction func home(sender: AnyObject) 
        if (scrollView != nil)
            scrollView.scrollRectToVisible(CGRectMake(8, 1004, 359, 496), animated: true)
        
    

    @IBOutlet var scrollView2: UIScrollView!
    @IBOutlet weak var label: UILabel!
    @IBOutlet weak var scrollView: UIScrollView!

    override func viewDidLoad() 
        super.viewDidLoad()
        // Do any additional setup after loading the view, typically from a nib.

        if (scrollView2 != nil)
            scrollView2.contentSize.height = 5000
            scrollView2.contentSize.width = 375
        

        if (ScrollView != nil)
            scrollView.contentSize.height = 5000
            scrollView.contentSize.width = 375
        

    


我有第二个视图控制器,它从第一个视图控制器呈现,带有Push segue。这个视图控制器还有一个名为HomeUIButton。当我点击viewController2中的Home按钮时,我想返回viewController1并在那里执行home动作来定位viewController1中的scrollView。

如何在 Swift 中做到这一点?谢谢!

【问题讨论】:

不清楚您在问什么,因为视图控制器结构远非显而易见 - 滚动视图与任何事情有什么关系?旁注:变量和方法名应该用驼峰式书写:scrollViewhome 我有链接到滚动视图的主页按钮,所以当我点击主页时,它会转到那个位置,但是当我把主页放在一个新的 ViewController 中,即 ViewController2 时,我会想要它,所以当我点击主页时转到 ViewController,它是最初的视图控制器,即 ViewController1,然后自动滚动到我放入的 x,y,w,h 如果您使用的是uinavigationcontroller,请致电popViewControllerAnimated: - 您提供的有关当前设置的信息太少。 我把我所有的都放在这里了,这足以帮助我吗? 基本上我需要一个按钮,所以当我按下它时,它将转到另一个 ViewController 到 UIScrollVIew 的 Y 点 【参考方案1】:

你想按下 viewController2 中的 Home 按钮并返回到 viewController1 并执行一个方法来定位你的滚动视图。

你可以使用 unwind segue 来完成这个任务。在初始 viewController 中的 home 函数下方,添加一个名为 goHome 的方法:

@IBAction func home(sender: AnyObject) 
    if (scrollView != nil) 
        scrollView.scrollRectToVisible(CGRectMake(8, 1004, 359, 496), animated: true)
    


@IBAction func goHome(segue: UIStoryboardSegue) 
    // Call the home method to position the scrollView
    home(self)

然后在 Storyboard 中,Control-从 viewController2 中的 Home 按钮拖动到 viewController 顶部的 Exit 图标,然后从弹出窗口。




然后,当您运行您的应用并在 viewController2 中按 Home 时,它将展开回到 viewController1 并调用 home 将滚动视图定位到您想要的位置。

【讨论】:

非常感谢,我现在就去练习一下。 我还有一个问题,在 viewController2 中,我有一个连接到 viewController1 的“返回”UIButton,所以我可以返回它。是否有可能当我在 scrollView 上的某个位置时,我可以转到 viewController2 并且当我点击返回而不是我在 viewController2 中设置的 UIButtons 时,我会回到我离开的原始位置?我知道从 viewController1 到 2 的部分,但是当我将 viewController2 到 1 时,我不知道如何在原点。谢谢你在另一部分帮助我,我会练习那个 您的后退按钮是如何连接的?它是导航控制器提供的默认值,还是您刚刚添加了一个名为 BackUIButton,它使用推送转场返回 VC1? 刚刚添加了一个名为 Back 的 UIButton,它使用 push segue 返回到 VC1 您不想通过 push segue 回到 VC1。 push segue 会创建一个新的 VC1 副本。你想像我上面展示的那样使用 unwind segue。在 VC1 中创建第二个着陆点 @IBAction func returnHere(segue: UIStoryboardSegue) // nothing to do here right now ,然后将您的 Back 按钮连接到退出图标并选择 returnHere。然后,当您按 Back 时,您将返回 VC1,完全是,就像您离开它一样。

以上是关于如何从 viewController2 上的按钮对 viewController1 执行操作?的主要内容,如果未能解决你的问题,请参考以下文章

如何从另一个类触发 UIButton?

如何在 WKWebview 上添加 UIButton?

如何清除导航堆栈以使后退按钮不出现?

如何在ViewController2.swift类的overCurrentContext视图中显示图像?

从 UIScrollView 上的特定位置开始

如何从地图图钉上的披露按钮调用 segue?