首页 文章 精选 留言 我的

精选列表

搜索[赛博朋克],共10000篇文章
优秀的个人博客,低调大师

博文视点 疯狂ios讲义之选择器(UIPickerView)

UIPickerView也是一个选择器控件它比UIDatePicker更加通用它可以生成单列的选择器也可生成多列的选择器而且开发者完全可以自定义选择项的外观因此用法非常灵活。 UIPickerView直接继承了UIView没有继承UIControl因此它不能像UIControl那样绑定事件处理方法UIPickerView的事件处理由其委托对象完成。 UIPickerView控件常用的属性和方法如下。 numberOfComponents获取UIPickerView指定列中包含的列表项的数量。该属性是一个只读属性。 showsSelectionIndicator该属性控制是否显示UIPickerView中的选中标记以高亮背景作为选中标记。 - numberOfRowsInComponent:获取UIPickerView包含的列数量。 - rowSizeForComponent:获取UIPickerView包含的指定列中列表项的大小。该方法返回一个CGSize对象。 - selectRow:inComponent:animated:该方法设置选中该UIPickerView中指定列的特定列表项。最后一个参数控制是否使用动画。 - selectedRowInComponent:该方法返回该UIPickerView指定列中被选中的列表项。 - viewForRow:forComponent:该方法返回该UIPickerView指定列的列表项所使用的UIView控件。 UIDatePicker控件只是负责该控件的通用行为而该控件包含多少列各列包含多少个列表项则由UIPickerViewDataSource对象负责。开发者必须为UIPickerView设置UIPickerViewDataSource对象并实现如下两个方法。 - numberOfComponentsInPickerView:该UIPickerView将通过该方法来判断应该包含多少列。 - pickerView:numberOfRowsInComponent:该UIPickerView将通过该方法判断指定列应该包含多少个列表项。 如果程序需要控制UIPickerView中各列的宽度以及各列中列表项的大小和外观或程序需要为UIPickerView的选中事件提供响应都需要为UIPickerView设置UIPickerViewDelegate委托对象并根据需要实现该委托对象中的如下方法。 - pickerView:rowHeightForComponent:该方法返回的CGFloat值将作为该UIPickerView控件中指定列中列表项的高度。 - pickerView:widthForComponent:该方法返回的CGFloat值将作为该UIPickerView控件中指定列的宽度。 - pickerView:titleForRow:forComponent:该方法返回的NSString值将作为该UIPickerView控件中指定列的列表项的文本标题。 - pickerView:viewForRow:forComponent:reusingView:该方法返回的UIView控件将直接作为该UIPickerView控件中指定列的指定列表项。 - pickerView:didSelectRow:inComponent:当用户单击选中该UIPickerView控件的指定列的指定列表项时将会激发该方法。 Interface Builder只支持为UIPickerView设置一个属性——Shows Selection Indicator该属性用于控制是否显示UIPickerView中的选中标记以高亮背景作为选中标记。 下面通过程序来介绍UIPickerView的功能和用法。 10.12.1单列选择器 对于单列选择器只要控制UIPickerView的dataSource对象的numberOfComponentsInPickerView:方法返回1即可。 下面创建一个单列选择器首先创建一个Single View Application使用Interface Builder打开应用的界面设计文件并将一个UIPickerView拖入界面设计文件中为在程序中访问该控件需要将该控件绑定到picker IBOutlet属性。 接下来开始修改控制器类本例打算使用控制器类作为UIPickerView的dataSource和delegate因此程序需要让控制器类实现UIPickerViewDataSource、UIPickerViewDelegate两个协议。 修改控制器类的实现代码主要就是实现UIPickerViewDataSource、UIPickerViewDelegate两个协议中的必要方法其代码如下。 程序清单codes/10/10.12/UIPickerViewTest/UIPickerViewTest /FKViewController.m 上面的程序首先初始化了一个NSArray接下来的关键就是实现了4个用粗体字表示的方法其中有两个方法来自UIPickerViewDataSource协议分别用于控制该UIPickerView控件包含多少列、各列包含多少个列表项另两个方法则来自UIPickerViewDelegate最后一个粗体字方法负责为UIPickerView控件的选中事件提供响应——当用户选中该UIPickerView的某个列表项时系统将会自动激发该方法该方法的实现逻辑就是使用UIAlertView显示用户选择的图书。 编译、运行该程序可以看到如图10.46所示的效果。 图10.46单列UIPickerView 如果用户选择某个列表项程序将会弹出如图 10.47 所示的 UIAlertView 警告框。 图10.47选中指定项 10.12.2多列选择器 对单列选择器而言只要控制UIPickerView的dataSource对象的numberOfComponentsInPickerView:方法返回大于1的整数即可。 本节创建一个多列选择器首先创建一个Single View Application使用Interface Builder打开应用的界面设计文件并将一个UIPickerView拖入界面设计文件中为在程序中访问该控件需要将该控件绑定到picker IBOutlet属性。 接下来修改控制器类本例打算使用控制器类作为UIPickerView的dataSource和delegate因此程序需要让控制器类实现UIPickerViewDataSource、UIPickerViewDelegate两个协议。 修改控制器类的实现代码主要就是实现UIPickerViewDataSource、UIPickerViewDelegate两个协议中的必要方法其代码如下。 程序清单codes/10/10.12/MultiPickerTest/MultiPickerTest/FKViewController.m 该程序与前一个程序基本相似同样需要实现上面4个方法只是numberOfComponentsInPickerView:方法返回了2因此该UIPickerView包含两列程序创建了两个NSArray分别为两列提供数据项。除此之外上面的程序还实现了一个pickerView:widthForComponent:方法该方法的返回值控制UIPickerView中各列的宽度。 编译、运行该程序可以看到如图10.48所示的两列选择器。 如果用户选中指定的列表项该应用同样会弹出UIAlertView显示用户的选择弹出的警告框与图10.47类似。 10.12.3相互依赖的多列选择器 10.12.2节的示例虽然是一个两列的UIPickerView控件但该控件的两列基本没有任何关系选择第一列的作者时第二列的图书不会动态更新——在某些情况下这是允许的。但在某些情况下我们需要第二列的列表项依赖第一列的选择即当第一列选择作者时第二列只显示该作者的图书。 为了让第二列能根据第一列的选择动态加载程序需要用户选择第一列的事件并根据该事件动态加载第二列的数据然后强制重新加载UIDatePicker的第二列列表项。 下面创建一个相互依赖的多列选择器首先创建一个Single View Application使用Interface Builder打开应用的界面设计文件并将一个UIPickerView拖入界面设计文件中为在程序中访问该控件需要将该控件绑定到picker IBOutlet属性。 接下来开始修改控制器类本例使用控制器类作为UIPickerView的dataSource和delegate因此程序需要让控制器类实现UIPickerViewDataSource、UIPickerViewDelegate两个协议。 修改控制器类的实现代码主要就是实现UIPickerViewDataSource、UIPickerViewDelegate两个协议中的必要方法其代码如下。 程序清单codes/10/10.12/MultiPickerTest2/MultiPickerTest2/FKViewController.m 上面控制器类的实现部分与前一个示例中控制器类的实现部分大致相同关键就是程序中的粗体字代码。本程序采用了NSDictionary分别保存NSPickerView控件中的两列数据NSDictionary的所有key组成的集合作为第1列的数据当用户选中第一列的某个作者后程序取出NSDictionary中该作者对应的图书集合作为第二列的数据。这就可以让第二列数据随第一列的选择动态改变。 编译、运行该程序在第一列中选中某个作者可以看到如图10.49所示的效果。 如果用户选中指定的列表项该应用同样会弹出UIAlertView显示用户的选择弹出的警告框与图10.47类似。 10.12.4自定义选择器视图 前面示例看到的所有列表项都是文字形式实际上UIPickerView允许开发者对列表项进行任意定制。开发者只要实现UIPickerViewDelegate协议中的-pickerView:viewForRow:forComponent: reusingView:方法即可该方法返回的UIView将作为UIPickerView指定列和列表项的视图控件。 实例“老虎机”游戏 下面以一个简单的“老虎机”游戏实例来示范自定义选择器视图的用法。 首先创建一个Single View Application使用Interface Builder打开应用的界面设计文件并将一个UIPickerView拖入界面设计文件中再将一个UIImageView和一个UIButton拖入应用界面中然后将这三个控件摆放整齐。为了在程序中访问这三个控件分别将它们绑定到picker、image、startBn这三个IBAction属性。除此之外程序还需要响应按钮的点击事件因此为该按钮控件的Touch Up Inside事件绑定clicked:事件处理方法。 提示 “老虎机”游戏的列表项都是图标则需要为该实例准备一些图标——读者既可用本实例提供的图标也可用自己选择的图标但图标不要太大以小于60像素×60像素为宜将这些图标拖入应用中即可。 接下来开始修改控制器类本例使用控制器类作为UIPickerView的dataSource和delegate因此程序需要让控制器类实现UIPickerViewDataSource、UIPickerViewDelegate两个协议。除此之外程序需要分别为UIPickerView的5列准备数据因此程序在控制器类的接口部分定义了5个NSArray属性其代码如下。 程序清单codes/10/10.12/CustomPicker/CustomPicker/FKViewController.h 然后修改该控制器类的实现部分主要就是实现UIPickerViewDataSource、UIPickerViewDelegate两个协议中的必要方法其代码如下。 程序清单codes/10/10.12/CustomPicker/CustomPicker/FKViewController.m 上面程序中为UIPickerView实现自定义列表项的关键就是第一段粗体字代码该方法返回一个UIImageView作为各列的列表项控件。因此该示例中UIPickerView所包含的各列的列表项都是UIImageView控件。 接下来的两行粗体字代码负责生成一个随机数并根据生成的随机数来选中UIPickerView的指定列表项这样就可让UIPickerView的5列随机选中指定的列表项——程序接下来的代码判断5个随机数中是否有相同的数出现过3次以上意味着UIPickerView的5列中出现了3个以上相同的图标——如果符合该条件程序就延迟0.5秒执行showWin方法该方法就是播放胜利音乐并显示胜利图标否则就延迟0.5秒执行showLose方法该方法显示失败图标。 由于该程序使用AudioToolbox来播放音乐因此程序还需要将win.wav和crunch.wav两个音乐文件拖入项目中。除此之外iOS项目默认是不带AudioToolbox库的因此需要手动添加AudioToolbox库为iOS项目添加指定库的步骤如下。 ①在项目导航面板中单击指定项目对应的图标。 ②选中中间编辑区域左侧的TARGETS下面的应用如图10.50所示。 图10.50添加库 ③选择编辑窗口上方的Build Phases标签单击Link Binary With Libraries旁边的三角符号即可展开该项目当前包含的所有库如图10.51所示。 图 10.51 查看项目已包含的库 ④ 单击图10.51所示窗口中“添加库”的“+”图标系统将会显示如图10.52所示的库列表。 ⑤在图10.52所示的对话框中选中需要添加的库也可通过上面的搜索框进行搜索单击“Add”按钮即可完成添加。 图10.52选择需要添加的库 按上面所示步骤为该项目添加AudioToolbox库然后编译、运行该程序即可通过单击程序界面上的按钮开始游戏游戏界面如图10.53所示。 图10.53自定义UIPickerView实现老虎机 ————本文节选自《疯狂ios讲义》 本文转自 fkJava李刚51CTO博客,原文链接:http://blog.51cto.com/javaligang/1354375,如需转载请自行联系原作者

优秀的个人博客,低调大师

【博文推荐】测试openstack neutron的网络连通性

测试openstack网络连通性,方式如下: 1.openstack控制端执行nova list 查看VM对应的名称和VM_UUID。 2.openstack控制端执行nova show $VM_UUID,查看VM所在的openstack compute node信息和instance name. 3.登录到openstack compute node,执行virsh list 查看VM状态,执行virsh dumpxml instance-XXXX查找文件中的关于“Bridge”信息,查找tap的ID和网桥 qbrXXXX. VM系统里面的信息如下: 结合图片可以看出: eth0连接的目的设备是:tap162f6bda-36,别名为net0. eth1连接的目的设备是:tap8d14e7bd-35,别名为net1. ethX和tapXXX是TAP设备。 TAP设备桥接到网桥qbrXX上。qbr设备是因为不能在TAP设备上配置network ACL rules而增加的设备。 eth0对应的tap162f6bda-36,桥接到的网桥为qbr162f6bda-36. eth1对应的tap8d14e7bd-35,桥接到的网桥为qbr8d14e7bd-35. 4.执行brctl show查看网桥qbr上的接口信息,找到tap设备和qvbXXXX接口。 这里可以看到网桥qbr162f6bda-36,上面有接口qvb162f6bda-36和tap162f6bda-36. 网桥qbr8d14e7bd-35,上面有接口qvb8d14e7bd-35和tap8d14e7bd-35. 这里出现的qvbXXX和qvoXXX是一对veth pair devices,是一对虚拟的网卡设备,用来连接bridge device和switch。连接Linux bridge网桥和Open vSwitch的虚拟网卡设备。名字的涵义是q-quantum,v-veth,b-bridge,o-open vswitch.(quantum年代的遗留)。 5.lshw -class network|more 查看qvb设备的驱动是否是veth类型。 6.ethtool -S 查看qvb接口的对端peer_ifindex:number。 7.ip link找到number对应的接口qvoXXX。 qvbXXX和qvoXXX是一对veth设备,成对出现的。可以根据ethtool -S 查看对端的number,并且根据ip link|more查看到对应的veth设备名称。 qvb是quamtum veth bridge. qvo是quamtum veth open vswitch. qvoXXX设备连接到了Open vSwitch设备br-int. 8.通过Open vSwitch 中的命令ovs-vsctl port-to-br qvoXXX查看qvoXXX设备所属的bridge。 这个ovs-vsctl port-to-br qvoXXX是列出所有挂载到qvoXXX的网桥。 9.可以通过ovs-vsctl list-br查看所有的网桥: 10.可以通过ovs-vsctl list-ports br-XX查看brXXX上面的端口。 ovs-vsctl list-ports br-int和ovs-vsctl list-port br-ethXXX. int-br-ethX和phy-br-ethX是用来连接Open Vswitch设备br-int和br-ethX的。另外,VLAN ID的转换是发生在br-int和br-ethX的端口int-br-ethX和phy-br-ethX上面的。从int-br-ethX进来的数据包,其VLAN ID 会被转换为内部VLAN 的ID。同理,从网络出去的数据包,经过phy-br-ethX,VLAN ID会从内部VLAN ID 转化为外部VLAN ID。 11.通过ethtool -S 命令查看int-br-ethX的对端设备number,并且通过ip link |more |grep number查看int-br-ethX的对端设备。 12.查看phy-br-ethX连接到的虚拟网桥br-ethX. 13.看到虚拟网桥br-ethX上的端口: 关于本例子中的br-ethX和物理网口ethX的关系是:最后数据包要到物理网络中,必须依靠真正的物理网卡。所以必须ovs-vsctl add-port br-ethX ethX。 本例子中是ovs-vsctl add-port br-eth2 eth3。这样,整个链路才能完全打通。 这样,我看到从VM的端口到qvoXXX接口的信息及网桥和端口的连接情况,结合tcpdump -i 命令查看网络流量。这种网络的连接架构,能够作为网络故障分析的依据。 作者:林夕 来源:51CTO

优秀的个人博客,低调大师

农历鸡年(丁酉)正月初一第一博

2017年1月28日 农历丁酉(鸡年)正月初一 辛丑月 乙卯日 新的一个开始,也觉得自己需要有所变化了。决定通过阿里云完成新的学习和工作环境的搭建。 我主要是做企业OA系统定制和企业咨询服务的,所以去年8月份注册了自己的个人独资企业,通过运营自己公司来深入体会和了解小微企业运营过程中可能碰到的各种问题,从发现问题和解决问题过程中找到更适合客户的解决方案。 首先来制订一下我第一季度的OKR。 O: 企业网站搭建完成。 KR: 易度平台的建站应用 易度平台的自定义皮肤应用 易度平台的工作日应用 微信企业号的自定义应用 微信公众号的自定义应用 O: 发票归集的开发 KR: 报销流程整合发票归集功能 根据报销情况自动生成财务凭证 结合会计准则和财税政策提供提醒功能

资源下载

更多资源
腾讯云软件源

腾讯云软件源

为解决软件依赖安装时官方源访问速度慢的问题,腾讯云为一些软件搭建了缓存服务。您可以通过使用腾讯云软件源站来提升依赖包的安装速度。为了方便用户自由搭建服务架构,目前腾讯云软件源站支持公网访问和内网访问。

Spring

Spring

Spring框架(Spring Framework)是由Rod Johnson于2002年提出的开源Java企业级应用框架,旨在通过使用JavaBean替代传统EJB实现方式降低企业级编程开发的复杂性。该框架基于简单性、可测试性和松耦合性设计理念,提供核心容器、应用上下文、数据访问集成等模块,支持整合Hibernate、Struts等第三方框架,其适用范围不仅限于服务器端开发,绝大多数Java应用均可从中受益。

Rocky Linux

Rocky Linux

Rocky Linux(中文名:洛基)是由Gregory Kurtzer于2020年12月发起的企业级Linux发行版,作为CentOS稳定版停止维护后与RHEL(Red Hat Enterprise Linux)完全兼容的开源替代方案,由社区拥有并管理,支持x86_64、aarch64等架构。其通过重新编译RHEL源代码提供长期稳定性,采用模块化包装和SELinux安全架构,默认包含GNOME桌面环境及XFS文件系统,支持十年生命周期更新。

WebStorm

WebStorm

WebStorm 是jetbrains公司旗下一款JavaScript 开发工具。目前已经被广大中国JS开发者誉为“Web前端开发神器”、“最强大的HTML5编辑器”、“最智能的JavaScript IDE”等。与IntelliJ IDEA同源,继承了IntelliJ IDEA强大的JS部分的功能。

用户登录
用户注册