首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
社区首页 >问答首页 >如何调用UIPickerView inSwift的子类?

如何调用UIPickerView inSwift的子类?
EN

Stack Overflow用户
提问于 2015-05-04 09:08:17
回答 2查看 272关注 0票数 0

我有一个ViewController,UIPickerView作为单个控件myPickerView,它属于类MyPickerView,是作为UIPickerView的子类创建的。我通过myPickerView调用ViewController viewDidLoad中的myPickerView.viewDidLoad。但是,这并不会执行MyPickerView的源函数。

我需要澄清一下我怎样才能做到这一点。我之所以使用MyPickerView,是因为它有很多特殊的代码,我不想把主ViewController弄乱。参见下面的示例代码:

代码语言:javascript
运行
AI代码解释
复制
import UIKit

class ViewController: UIViewController {

@IBOutlet weak var myPickerView: MyPickerView!
override func viewDidLoad() {
    super.viewDidLoad()
    myPickerView.viewDidLoad()
}

override func didReceiveMemoryWarning() {
    super.didReceiveMemoryWarning()
    // Dispose of any resources that can be recreated.
}


}


import UIKit
var gSep = ","
class MyPickerView: UIPickerView , UIPickerViewDataSource,     UIPickerViewDelegate {
var pickerData = [[" "],[" "]]
var category = [""]
var subCategory = [""]
var dictMenuList = [String:String]()

//MARK:- category/subcategory picker


func viewDidLoad() {
    println("MyPickerView: viewDidLoad")

    dictMenuList = ["Medical":"Sub-Cat 1.1,Sub-Cat 1.2,Sub-Cat 1.3,Sub-Cat 1.4,Sub-Cat 1.5,Sub-Cat 1.6,Sub-Cat 1.7",
        "Taxes": "Sub-Cat 2.1,Sub-Cat 2.2,Sub-Cat 2.3,Sub-Cat 2.4",
        "Bills": "Sub-Cat 3.1,Sub-Cat 3.2,Sub-Cat 3.3,Sub-Cat 3.4,Sub-Cat 3.5,Sub-Cat 3.6,Sub-Cat 3.7"]

    println("MyPickerView dictMenuList: \(dictMenuList)")



    self.reloadAllComponents()

    let firstKey = self.loadPickerWithCategory(0)
    self.loadPickerWithSubCategory(firstKey)

}


func numberOfComponentsInPickerView(pickerView: UIPickerView) -> Int {
    println("MyPickerView: numberOfComponentsInPickerView \(pickerData.count)")
    return pickerData.count
}

func pickerView(pickerView: UIPickerView, numberOfRowsInComponent component: Int) -> Int {
    return pickerData[component].count
}

func pickerView(pickerView: UIPickerView, didSelectRow row: Int, inComponent component: Int) {
    if component == 0 {
        let selectedKey = category[row]
        loadPickerWithSubCategory(selectedKey)
    }
}

func pickerView(pickerView: UIPickerView, titleForRow row: Int, forComponent component: Int) -> String! {
    return pickerData[component][row]
}

func pickerView(pickerView: UIPickerView, viewForRow row: Int, forComponent component: Int, reusingView view: UIView!) -> UIView
{
    var pickerLabel = UILabel()
    pickerLabel.textColor = UIColor.blackColor()
    pickerLabel.text = pickerData[component][row]
    pickerLabel.font = UIFont(name: pickerLabel.font.fontName, size: 17)
    pickerLabel.textAlignment = NSTextAlignment.Center
    return pickerLabel
}

func loadPickerWithCategory (row: Int) -> String{
    println("loadPickerWithCategory")
    category = [String](dictMenuList.keys)
    println("MyPickerView: category: \(category)")
    if category.isEmpty {
        return ""
    }
    let n1 = dictMenuList.count
    pickerData[0].removeAll(keepCapacity: true)
    for i in 0 ..< n1
    {
        pickerData[0].append(category[i])
    }
    return category[row]
}

func loadPickerWithSubCategory (key: String) {
    println("MyPickerView: loadPickerWithSubCategory")
    let x = dictMenuList[key]
    subCategory = x!.componentsSeparatedByString(gSep)
    let n1 = subCategory.count
    pickerData[1].removeAll(keepCapacity: true)
    if subCategory.isEmpty {
        return
    }
    for i in 0 ..< n1
    {
        pickerData[1].append(subCategory[i])
    }

    self.reloadAllComponents()
}

}
EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2015-05-04 09:39:37

方法viewDidLoad是视图控制器方法,而不是视图方法。UIPickerViewUIView的子类,而不是UIViewController的子类,因此系统不会调用viewDidLoad方法。

您需要覆盖一个或多个init方法。

如果要从Storyboard或XIB加载选择器视图,则可能要重写initWithCoder。

如果要在代码中创建选择器,则可能要重写initWithFrame。

有时,我创建一个方法setup,我从initWithCoder:initWithFrame:调用该方法。这样,无论如何加载视图对象,我的设置代码都会被调用。

我隐约记得在Swift中有一种更好的方法来处理这个决斗的初始化者问题,但是我不记得它是什么。(我还在学斯威夫特。)

编辑:

我突然意识到,在加载视图并设置了所有的输出后,您可以使用awakeFromNib方法进行安装。这大致相当于viewDidLoad对视图控制器的调用。我应该早点想到的。

(awakeFromNib是NSObject的一种方法,如果您不知道它的存在,就很难找到它。)

票数 0
EN

Stack Overflow用户

发布于 2015-05-04 09:36:22

首先,viewDidLoad()UIViewController类的一个方法,在控制器的视图加载到内存后调用。阅读更多的这里。您不能在视图中使用它。

因此,您应该在自定义选择器类中实现一个init方法。我建议重写initWithFrameinitWithCoder,并在那里设置组件。

您将像这样初始化您的自定义选择器:

代码语言:javascript
运行
AI代码解释
复制
myPickerView = MyPickerView(frame: yourFrame)
票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/30035850

复制
相关文章
Cypress web自动化21-如何在多个tests之间共享cookies
Cypress 默认每个用例开始之前会清空所有的cookies,保证每个用例的独立性和干净的环境。 但是我们希望在一个js文件下写多个测试用例的时候,希望只调用一次登录, 记住cookies,后面的用例都默认是登录状态,这样测试的效率高一些。 实现cookies共享有2种实现方式
上海-悠悠
2020/05/29
1.9K0
多个Pod之间共享Volume以及详细配置
要在多个Pod之间共享Volume,可以使用Kubernetes的persistentVolumeClaim(PVC)来声明和访问共享的Volume。
一凡sir
2023/09/02
1.4K0
多个Pod之间共享Volume以及详细配置
如何优雅地解决多个 React、Vue 应用之间的状态共享
前言 人生是个积累的过程,你总会有摔倒,即使跌倒了,你也要懂得抓一把沙子在手里。—— 丁磊 码过的每一个需求、踩过的每一个坑、修过的每一个 bug 、学过的每一个知识以及看过的每一篇文章都不会成为无
前端劝退师
2020/12/15
2.1K0
如何优雅地解决多个 React、Vue  应用之间的状态共享
如何在微服务之间共享和同步代码
微服务架构非常适合构建可扩展的代码库,具有更少的耦合,更好的关注点分离,更高的弹性,结合不同的技术,最重要的是,更好的模块化和构建它的组件的可重用性。
February
2018/11/23
2.7K0
如何在WordPress网站之间共享用户和登录
wordpress为网站系统提供了相同的数据表结构,为快速实现多个WordPress网站之间共享用户数据提供了可能。wordpress如何实现如网易通行证等大站一样的共享用户登录呢?只需要将需要共享的数据库共用即可,我们这里只需要共享_user与_usermeta表,下面是完整实现过程。
许都博客
2021/06/15
1.9K0
Vue组件之间的数据共享
组件之间的数据共享 在项目开发中,组件之间的最常见的关系分为如下两种: 父子关系 兄弟关系 父子组件之间的数据共享 父子组件之间的数据共享又分为: 父 -> 子共享数据 子 -> 父共享数据 1. 父组件向子组件共享数据 父组件向子组件共享数据需要使用自定义属性。示例代码如下: 2. 子组件向父组件共享数据 子组件向父组件共享数据使用自定义事件。示例代码如下: 3. 兄弟组件之间的数据共享 在 vue2.x 中,兄弟组件之间数据共享的方案是 EventBus。 EventBus 的使用步骤 创建
777nx
2023/05/02
8010
Vue组件之间的数据共享
如何在多个应用程序中共享日志配置
有的时候你有多个应用程序,它们需要使用相同的日志配置。在这种情况下,你可以将日志配置放在一个共享的位置,然后通过项目文件快速引用。方便快捷,不用重复配置。
newbe36524
2023/08/23
2650
多个git账号之间的切换
做过很多遍了,却总是记不住,这回从头来描述一下。 介绍 所谓多个git账号,可能有两种情况: 我有多个github的账号,不同的账号对应不同的repo,需要push的时候自动区分账号 我有多个git的账号,有的是github的,有的是bitbucket的,有的是单位的gitlab的,不同账号对应不同的repo,需要push的时候自动区分账号 这两种情况的处理方法是一样的,分下面几步走: 处理 先假设我有两个账号,一个是github上的,一个是公司gitlab上面的。先为不同的账号生成不同的ssh-key
happy123.me
2018/06/04
2K0
面试官:sessionStorage可以在多个Tab之间共享数据吗?
英文 | https://fatfish.medium.com/interviewer-can-sessionstorage-share-data-between-multiple-tabs-c30983c61501
五月君
2023/09/06
4880
面试官:sessionStorage可以在多个Tab之间共享数据吗?
多个线程之间的通信问题
在同步代码块中,锁对象是谁,就用那个对象来调用wait和notify 为什么wait方法和notify方法需要定义在Object?       因为所有的对象都是Object的子类对象,而所欲的对象都可以当做锁对象
砖业洋__
2023/05/06
4320
多个线程之间的通信问题
共享主机和 WordPress 主机之间的区别
共享主机:顾名思义,共享主机基本上是一种网络托管,服务提供商提供来自多个网站的网页,并允许这些网站共享连接到互联网的物理服务器。它将网站内容存储在服务器上,并在需要时提供给访问者。
海拥
2022/12/11
5.9K0
在 request 之间共享 SecurityContext
既然 SecurityContext 是存放在 ThreadLocal 中的,而且在每次权限鉴定的时候都是从 ThreadLocal 中获取 SecurityContext 中对应的 Authentication 所拥有的权限,并且不同的 request 是不同的线程,为什么每次都可以从 ThreadLocal 中获取到当前用户对应的 SecurityContext 呢?
johnhuster的分享
2022/03/28
7080
时代智能利器:Zapier —— 简化工作,提高效率!
在当今数字时代,人们面临着越来越多的数字化需求,如何高效连接应用程序和优化工作流程成为一大挑战。Zapier 作为一款强大的在线自动化工具,为用户提供了简单而高效的解决方案。无需编写代码,Zapier可以帮助你轻松连接各种应用程序,并实现自动化工作流程。
程序那些事儿
2023/08/10
8.5K0
时代智能利器:Zapier —— 简化工作,提高效率!
每个前端开发者都应知道的14个实用网站
在本文中,我将分享一些非常有用的网站合集,这些网站可以在你的日常工作中极大地帮助你。这些网站已经成为我各种任务的首选资源,节省了我的时间,提高了工作效率
前端小智@大迁世界
2023/08/16
1.2K0
每个前端开发者都应知道的14个实用网站
每个前端开发者都应知道的10个实用网站
Documatic 是一个高效的搜索引擎工具,旨在帮助开发人员轻松搜索他们的代码库,找到特定的代码片段、函数、方法和其他相关信息。该工具旨在通过在几秒钟内快速提供准确和相关的搜索结果,节省开发人员宝贵的时间,提高他们的生产力。
前端小智@大迁世界
2023/08/16
4480
每个前端开发者都应知道的10个实用网站
【JavaSE专栏78】线程同步,控制多个线程之间的访问顺序和共享资源的安全性
本文讲解了 Java 中线程同步的语法和应用场景,并给出了样例代码。线程同步是一种机制,用于控制多个线程之间的访问顺序和共享资源的安全性。当多个线程并发地访问共享资源时,如果没有适当的同步机制,可能会导致数据不一致或出现竞态条件等问题。
Designer 小郑
2023/08/17
2830
【JavaSE专栏78】线程同步,控制多个线程之间的访问顺序和共享资源的安全性
SFTPServer如何共享多个目录
在使用知行之桥EDI系统的时候,有些客户作为SFTPServer端进行SFTP连接的时候,希望能够将文件按照不同的业务类型进行区分,并将区分好的文件放入不同的文件夹中,然后将这些文件夹共享给合作伙伴。
知行软件EDI
2023/02/03
1.1K0
基于CPU和RabbitMQ进行自动伸缩
最终用户客座文章作者:Ratnadeep Debnath,Zapier 网站可靠性工程师
CNCF
2022/03/27
1.3K0
基于CPU和RabbitMQ进行自动伸缩
【转载】如何在CentOS 7服务器之间使用NFS共享目录
NFS 即 (Network File System) 的缩写,最大的功能就是可以通过网络,让不同的机器、不同的操作系统实现共享彼此的文件。
兜兜转转
2023/03/08
2.3K0
如何在博客的日志之间显示广告
这篇文章将向你展示如何在 WordPress 主页上的日志之间放置 AdSense 代码(或者其他广告的代码)。同样的方法也可以用于在存档页面(包括分类和作者存档页面)放置广告。
Denis
2023/04/13
5740

相似问题

带番石榴EventBus的条件订阅

20

Eventbus事件订阅者

27

与番石榴eventBus订阅者一起使用Spring事务处理

12

芭乐eventbus有订阅者吗?

10

Vertx : eventBus订阅者被取消订阅的原因

10
添加站长 进交流群

领取专属 10元无门槛券

AI混元助手 在线答疑

扫码加入开发者社群
关注 腾讯云开发者公众号

洞察 腾讯核心技术

剖析业界实践案例

扫码关注腾讯云开发者公众号
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档
查看详情【社区公告】 技术创作特训营有奖征文