Swift中利用AppDelegate实现调用指定ViewController中的函数

简介:

接着上一篇的Blog讲,在我们自定义了TableViewCell之后,我们可能需要点击cell里面的button等操作,比如点击了以后跳转到别的页面,这个时候,因为跳转动作是在tableview所在的viewcontroller(假设为A类)实现的,所以,我们需要在tablewViewCell类里面调用A类的一个实例,这个实例一般是通过AppDelegate类实现的。

具体来看一下实现过程。

我们先来看一下整体的需求:

在“基站列表”这个ViewController里面,我们的TableViewCell 是自定义的,然后在我们自定义的cell里面,有按钮,我们点击按钮以后,跳转到下一个界面,Segue的identifier是“showInfoForStation”。

很明显,我们的需求是:在cell的类中button的action里面,获取到“基站列表”ViewContrller的一个实例,这个实例有个方法,可以实现界面的跳转。

好了,上代码:

AppDelegate.Swift

import UIKit

@UIApplicationMain
class AppDelegate: UIResponder, UIApplicationDelegate {

    var window: UIWindow?
    var projectDetail = ProjectDetailViewController()

    func application(application: UIApplication, didFinishLaunchingWithOptions launchOptions: [NSObject: AnyObject]?) -> Bool {
        // Override point for customization after application launch.
        let mainSB = UIStoryboard(name: "Main", bundle: nil)
        self.projectDetail = mainSB.instantiateViewControllerWithIdentifier("projectDetailVC") as! ProjectDetailViewController
        return true
        
    }


首先声明我们想要的viewController的实例,这里我命名为projectDetail 

这里在didFinishLaunchingWithOptions函数里面其实得到的是,因为ViewController只有在它被调用的时候,才被实例化,也就是viewDidLoad只有在首次调用该界面的时候,才会实例化改类。

所以接下来我们需要在ProjectDetailViewControler类的ViewDidLoad函数中真正把这个viewcontroller的实例赋予AppDelegate

ProjectDetailViewController.swfit

    override func viewDidLoad() {
        super.viewDidLoad()
        // Do any additional setup after loading the view.
        let appdelegate = UIApplication.sharedApplication().delegate as! AppDelegate
        appdelegate.projectDetail = self
        self.tableView.delegate = self
        self.tableView.dataSource = self
        // remove the blank of the header of the table view, mind the height must be more than 0
        self.tableView.tableHeaderView = UIView(frame: CGRectMake(0, 0, self.tableView.frame.size.width, 0.01))
        // register the custom tableview cell
        var nib = UINib(nibName: "StationTableViewCell", bundle: nil)
        self.tableView.registerNib(nib, forCellReuseIdentifier: "cell")
    }

这里的代码和上一篇blog的代码一样,就不多介绍,关键性的代码就是那两行:

        let appdelegate = UIApplication.sharedApplication().delegate as! AppDelegate
        appdelegate.projectDetail = self

同时实现一个methode,用于别的类里面调用改方法可以实现页面的跳转:

    // Methord to show the other VC For the AppDelegate to call
    func showStationDetail()->(){
        self.performSegueWithIdentifier("showInfoForStation", sender: self)
    }
这里的跳转动作和之前在storyBoard里面的segue的indentifier一样,是showInfoForStation


最后,在自定义的cell里面完成button的点击action函数就ok了

StationTableViewCell.swift

    @IBAction func buttonPressed(sender: AnyObject) {
        let appdelegate = UIApplication.sharedApplication().delegate as! AppDelegate
        appdelegate.projectDetail.showStationDetail()
    }





目录
相关文章
|
2天前
|
安全 编译器 Swift
Swift 函数
10月更文挑战第27天
9 1
|
4月前
|
Swift iOS开发 Kotlin
苹果iOS新手开发之Swift中实现类似Kotlin的作用域函数
Swift可通过扩展实现类似Kotlin作用域函数效果。如自定义`let`, `run`, `with`, `apply`, `also`,增强代码可读性和简洁性。虽无直接内置支持,但利用Swift特性可达成相似功能。
69 7
|
5月前
|
Swift C++ 索引
Swift开发——简单函数实例
函数是编程的基础,用于封装特定功能的代码。它们有关键词func、函数名、参数列表(可为空)和返回类型。多返回值可通过元组、数组、inout参数或可选类型实现。例如,返回元组 `(value1, value2)`,数组 `[value1, value2]` 或使用可选数组 `[[Double]]?`。函数可以作为其他函数的参数,类似闭包或Lambda表达式。在Swift中,示例展示了通过元组、带索引的元组、数组和可选类型返回多个值的函数。还演示了如何使用inout参数交换变量值。
100 5
Swift开发——简单函数实例
|
6月前
Swift4.0判断本函数是否在其它类有相同的方法
Swift4.0判断本函数是否在其它类有相同的方法
43 0
|
6月前
|
存储 API Swift
【Swift开发专栏】Swift函数与闭包的实战应用
【4月更文挑战第30天】本文介绍了 Swift 中函数和闭包的实战应用。首先,函数的基本使用包括定义、参数与返回值、函数类型以及高级技巧如嵌套函数。接着,讨论了闭包的语法,包括无名函数、作为函数参数、简写形式和尾随闭包。最后,展示了函数和闭包在实战中的应用,如排序过滤集合和处理异步任务的回调。
47 0
|
6月前
|
存储 Swift
Swift 语言:什么是闭包(Closure)?它们与函数的区别是什么?
Swift 语言:什么是闭包(Closure)?它们与函数的区别是什么?
120 1
|
6月前
|
Swift
Swift中的函数
Swift中的函数
42 1
|
6月前
|
存储 Swift
Swift中,函数和闭包
Swift中,函数和闭包
72 1
|
Swift iOS开发
23 Swift中如何定义和使用函数
Swift中如何定义和使用函数
88 0
|
Swift
Swift Debug 和 Release 中 print() 函数调试切换
Swift Debug 和 Release 中 print() 函数调试切换
70 0