首页
学习
活动
专区
工具
TVP
发布
精选内容/技术社群/优惠产品,尽在小程序
立即前往

通过另一个ViewController从ViewController获取数据

从一个ViewController获取数据可以通过委托模式或者闭包来实现。

  1. 委托模式: 委托模式是一种常见的在iOS开发中用于传递数据的方式。在这种模式下,我们可以定义一个协议(Protocol),协议中定义了获取数据的方法。然后在源ViewController中,我们可以声明一个委托属性,并在合适的时机将自己设置为委托对象。在目标ViewController中,我们需要实现协议中定义的方法,并在需要获取数据的地方调用委托对象的方法来获取数据。

示例代码如下:

在源ViewController中:

代码语言:swift
复制
protocol DataDelegate: class {
    func getData(data: Any)
}

class SourceViewController: UIViewController {
    weak var delegate: DataDelegate?

    // 在某个事件触发时调用委托方法
    func sendData() {
        let data = // 获取数据的逻辑
        delegate?.getData(data: data)
    }
}

在目标ViewController中:

代码语言:swift
复制
class TargetViewController: UIViewController, DataDelegate {
    // 实现委托方法
    func getData(data: Any) {
        // 处理获取到的数据
    }

    // 在需要获取数据的地方调用源ViewController的发送数据方法
    func fetchData() {
        let sourceVC = // 获取源ViewController的实例
        sourceVC.delegate = self
        sourceVC.sendData()
    }
}
  1. 闭包: 闭包是一种轻量级的传递数据的方式,它可以在一个ViewController中定义一个闭包属性,并在需要获取数据的地方调用闭包来传递数据。在目标ViewController中,我们可以通过闭包参数来接收数据。

示例代码如下:

在源ViewController中:

代码语言:swift
复制
class SourceViewController: UIViewController {
    var dataClosure: ((Any) -> Void)?

    // 在某个事件触发时调用闭包传递数据
    func sendData() {
        let data = // 获取数据的逻辑
        dataClosure?(data)
    }
}

在目标ViewController中:

代码语言:swift
复制
class TargetViewController: UIViewController {
    // 在需要获取数据的地方设置闭包,并处理获取到的数据
    func fetchData() {
        let sourceVC = // 获取源ViewController的实例
        sourceVC.dataClosure = { data in
            // 处理获取到的数据
        }
        sourceVC.sendData()
    }
}

以上是从一个ViewController获取数据的两种常见方式,根据具体的需求和场景选择合适的方式来实现数据的传递。

页面内容是否对你有帮助?
有帮助
没帮助

相关·内容

IOS开发之获取Storyboard创建的ViewController

4.下面来编写我们的代码,上面我们用到了TextField,我们需要处理键盘的回收事件,所以我们的ViewController要遵守UITextFiledDelegate协议,实现有关键盘的方法     ...(1)遵守UITextFieldDelegate协议 1 2 3 4 #import   @interface ViewController : UIViewController... @end ​    (2)在ViewController.m中中进行回调注册和实现协议中相应的方法,代码如下: 1 2 3 4 5 6 7 8 9 10 11...storyboard: 通过bundle根据storyboard的名字来获取我们的storyboard,         UIStoryboard *story = [UIStoryboard storyboardWithName...storyboard: 通过bundle的名获取bundle, 在通过storyborad的名字来获取我们的storyboard;         2.在由storyboard获取storyboardID

1.8K80

iOS学习——获取当前最顶层的ViewController

在iOS开发过程中,我们经常性会需要获取当前页面的ViewController,然后利用ViewController进行一些操作,例如在最顶层的ViewController上展示一个UIAlertController...,或者在最顶层的ViewController上present另一个ViewController,或者进行其他操作。...1 实现思路   通过最底层的ViewController依次向上寻找,直到找到最顶层的ViewController,也就是UIApplication的keyWindow的rootViewController...在寻找的过程中,要分别考虑当前ViewController是UITabBarController和UINavigationController的情况,同时还要考虑到当前ViewController是否通过...用上面的方法获取到顶层的视图,判断currentVC.navigationController是否为nil。

6.5K50
  • iOS开发--一步步教你彻底学会『iOS应用间相互跳转』

    应用间相互跳转简介 在iOS开发的过程中,我们经常会遇到需要从一个应用程序A跳转到另一个应用程序B的场景。这就需要我们掌握iOS应用程序之间的相互跳转知识。...原理:通过设置跳转到应用B的URL Schemes(自定义的协议头),应用B将其自身“绑定”到一个自定义URL Schemes上,就可以应用A中利用应用B的URL Schemes启动应用B了。...这里用导航控制器Push两个ViewController通过Storyboard Segue设置两个ViewController的标识符绑定,分别为"homeToPage1"和"homeToPage2...是分割符; AppA是跳转回的应用App-A的URL Schemes 我们根据传递来的数据,进行反跳回去。 之前我们在应用App-B中通过AppDelegate执行不同页面的跳转。...在主控制器中我们可以通过- (void)prepareForSegue:(UIStoryboardSegue *)segue sender:(id)sender;方法获取将要跳转的页面控制器。

    1.3K30

    浅谈MVC

    在DateView中发起GetDateTime服务请求并获取数据后,需要将日期数据传递给TableView以发起获取表业务数据并加载到页面的操作,但因为这两个View是兄弟关系,而非父子关系,所以数据的传递只能采用发通知或者写委托的方式来处理...以往的开发经验表明,一个如此简单的数据传递处理,不值得用此“牛刀”。 于是渐渐有了用一个ViewController管理多个View的想法。...一旦这样设计,数据交换逻辑就简单多了,可以将所有网络请求都在一个ViewController中集中处理,各个子视图只管各自子控件的布局、显示。...另一个法子,也是目前我在项目中使用的法子,即是只用一个xib文件进行设计,每个子View的界面设计工作都放到ViewController对应的xib文件中来设计,这样界面事件就能轻松跟ViewController...这两者很像,但是仔细考量其实还是不一样,两种系统设计方式分别侧重不同的开发场景: 传统三层架构设计更适合Web开发,因为Web系统重在服务端数据的大量展现,数据用户界面产生后,最终会流转、持久化到数据库中

    93820

    iOS翻页视图控制器UIPageViewController的应用

    iOS翻页视图控制器UIPageViewController的应用 一、引言     UIPageViewController是iOS中少见的动画视图控制器之一,通过它既可以创建类似UIScrollView...上图中,UIPageViewControllerDataSource协议为UIPageViewController提供数据支持,DataSource协议提供的数据来自各个ViewContoller自行维护...UIPageViewController把DataSource中获取到的视图数据渲染给View用于当前视图控制器的展示。...@property (nonatomic, readonly) UIPageViewControllerTransitionStyle transitionStyle; //获取翻页方向 @property...UIViewController *> *)previousViewControllers transitionCompleted:(BOOL)completed; //屏幕防线改变时回到的方法,可以通过返回值重设书轴类型枚举

    2.2K10

    iOS程序猿如何快速掌握 PHP,化身全栈攻城狮?

    数据模型: id:42 name:iOS122 age:25 viewController=后面跟的是你你的表示你的视图控制器, model是一个字典,用于存储数据模型,支持输入多个键值对.id,name...MVC 设计模式 我们仍然常用的MVC模式来开始更进一步的讨论.M,即Model数据模型,对应于我们在地址栏输入的model;V,即视图View,更直接地说是显示数据,为了简化讨论,我们此处仅对移动端开发常用的...Model,允许且只允许用于通过URL来定义某个控制器的Model; PHP 是一本弱类型的语言,所以不必专门为某种控制器指定某种类型的Model....由于数组元素的值也可以是另一个数组,树形结构和多维数组也是允许的。" View: 一个显示HTML的实例....小结 本文通过模拟实现 iOS 的MVC的设计模式,来概要性地讲解了PHP中的对应的各个概念.熟悉以上操作,可以使你具备自定义服务器接口的基本能力.

    1.8K71

    Xcode:处理故事板的更好方式 享受Interface Builder的提示和技巧

    image.png 设计师的角度来看,这看起来很不错:您可以轻松查看完整的UI和导航流程。这正是Interface Builder的创建方式。 但对开发人员而言,这可能会导致多个问题。...HomeViewController } } 如果要通过 instantiateInitialViewController()访问ViewController ******,请确保在Interface...您可以使用相同的方法nib初始化视图: class LoginView: UIView { static func nibInstance() -> LoginView?...这是另一个常见的错误:使用新的segue导航回以前的viewController。...在这种情况下,按钮拖动到“退出”出口是期望代码已经在您的项目中。 通常,当您为按钮创建动作插座时,它会将代码放在拥有该按钮的同一个类中。

    1.4K30

    iOS对UIViewController生命周期和属性方法的解析

    iOS对UIViewController生命周期和属性方法的解析 一、引言         作为MVC设计模式中的C,Controller一直扮演着项目开发中最重要的角色,它是视图和数据的桥梁,通过它的管理...,将数据有条有理的展示在我们的View层上。...那么具体的调用顺序是怎样的呢,最好的办法是实践一下,通过编号打印,结果如下: ?...三、storyBoard加载UIViewController实例的传值陷阱         我们知道,当我们StoryBoard中加载ViewController时,我们在Controller中拖拽的视图是可以被初始化的...,这里面有一点需要我们注意,如果我们需要向controller中视图进行传值设置,通过以下方法得到的Controller中,视图还没有被初始化创建出来:  ViewController2 * viewController2

    2.9K20

    Mac开发跬步积累(六): 响应链NSResponder Chain

    对于键盘事件, 响应是窗口的第一响应者开始; 对于鼠标/触控板事件,响应是用户操作的view开始; 如果事件消息在最初没有响应,那么响应链将按照视图的层级结构依次传递消息,直到窗口对象(NSWindow...答案是调用对象的acceptsFirstResponder方法获取结果;这个方法默认返回NO;如果某个响应者对象希望成为第一响应者,那么它需要重写这个方法,并返回YES; 需要注意的一个事件是:Mouse-moved...响应链图 根据前文Event Message中讲到的鼠标/触控板事件是用户操作的View开始,由于ViewController的View没有实现mouseDown:响应事件,所以响应链会将事件接着传递给...ViewController响应mouseDown: 为了验证响应链的事件传递过程,我们在工程中添加自定义XCResponseView,并实现mouseDown:事件处理逻辑,运行代码控制台中的信息可以看出...答案:是改变第一响应者,因为键盘事件是第一响应者开始的! 我们需要将响应链设置为下图的效果即可:(View获取键盘事件后如果自己不响应,就会依据响应链传递给ViewController) ?

    2.3K10

    Mac OSX 开发基础控件学习之 NSOutlineView

    ,NSTableView就会面临一个问题:因为在osx中,NSTableView没有分组功能( sections) 因为在cocoa 中提供了另一个控件供满足我们的需求NSOutlineView它是继承自...下面我们通过一个示例(你也可以从这里Demo下载工程,但更推荐自己一步一步创建工程并实现功能)来简单学习一下怎样使用NSOutlineView显示带有层级结构的数据内容 创建osx项目工程,并搭建UI...界面,大致效果如下图: UI界面 控件库中,拖动Source List 控件(NSOutlineView)到storyboard中,并添加约束。...中初始化模型数据 setup mode 设置NSOutlineView的DataSource 和Delegate Data Source 和 Delegate ViewController 实现数据源和代理方法...ViewController 实现方法 NSOutlineView数据源方法调用顺序:numberOfChildrenOfItem->child index: Int ->isItemExpandable

    1.6K20

    【 iOS 应用开发 】 UIKit 控件 ( UIView 属性 | storyboard 设置 | 模拟器 | 拖线关联 | tag | 软键盘操作 | 颜色值 | 代码生成控件 | 动画设置 )

    中的 Is Initial View Controller 选项中设置箭头是否指向本 ViewController ; 6.按钮点击事件 : ① 代码到 Storyboard 拖线关联 IBAction...进行关联; ③ 按住 control 键, 控件拖到 ViewControler.m 空白处, 弹出生成方法对话框 生成对应事件绑定的方法; 7.UI 控件 与 ViewController 关联 :...- 拖动 : 界面中有多个 ViewController 时, 可以将箭头 ViewController 之间来回拖动, 切换 storyboard 界面 初始的 ViewController 控制器...IBAction) caculate{ NSLog(@"按钮点击"); } 3.关联按钮点击方法与按钮 : ① 打开辅助编辑器, 出现两个并列的编辑器, 一个现实 Main.storyboard 界面, 另一个现实...: 将一个按钮控件拖入 UIView 控件中, 修改文字为 改变颜色; 这里尝试一种新的方法来进行按钮点击方法设置; ① 进入辅助编辑器模式 : 一个显示 Main.storyboard, 另一个显示

    4.9K30
    领券