IOS SWIFT---使用UICollectionView

上一篇我们完成了第一个用swift写的ios小程序,今天我们拓展一下那个程序,使用UICollectionView。

UICollectionView类似android中的gridview可以实现九宫格的效果。

首先我们还是打开我们的故事版main.storyboard拖拽一个Collection View


默认是带一个Collection View Cell ,相当于我们的九宫格里面的子view,我们可以往cell里面拖拽控件,这些cell需要有一个标识符"Indentifier",我们这里的标识符就叫cell


同时我们需要把控制器和视图链接


  • 提示框里面显示"Outlets"里面有fataSource和delegate
  • 数据源和委托属性与当前的视图控制器关联
  • 程序运行时,会在相关控制器中寻找相关方法
     我们修改一下背景色,往cell里面放入一个label控件

我们新建一个控制器继承UICollectionViewCell
import UIKit

class CountCollectionViewCell: UICollectionViewCell {
   
    @IBOutlet weak var label: UILabel!
    var mUtil = Util()
    
    override init(frame:CGRect) {
        super.init(frame: frame)
    }
    required init(coder aDecoder: NSCoder) {
        super.init(coder: aDecoder)
    }
    
    func setViewLabel(index:NSIndexPath){
        self.label.text=mUtil.getCharacter(index)
    }
   
}

required修饰符可以看看这篇博客http://blog.csdn.net/yongyinmg/article/details/39673345

同时我们也可以看到swift定义函数的方式为 func 方法名 (方法参数) -> 返回值
接下来我们看看我们的ViewControll具体做了什么
import UIKit

class ViewController: UIViewController,UICollectionViewDataSource,UICollectionViewDelegate {

    @IBOutlet weak var textField: UITextField!
  
    @IBOutlet weak var mCollectionView: UICollectionView!
    var cell:CountCollectionViewCell? = nil
    var mUtil = Util()
    
    //当控制器的视图类加载完成时调用
    override func viewDidLoad() {
        super.viewDidLoad()
        // Do any additional setup after loading the view, typically from a nib.
    }

    //当系统触发内存警告时调用
    override func didReceiveMemoryWarning() {
        super.didReceiveMemoryWarning()
        // Dispose of any resources that can be recreated.
    }

    //cell个数
    func collectionView(collectionView: UICollectionView, numberOfItemsInSection section: Int) -> Int{
        return 15;
    }
    
    //相当于android中的getview
    func collectionView(collectionView: UICollectionView, cellForItemAtIndexPath indexPath: NSIndexPath) -> UICollectionViewCell{
         cell = collectionView.dequeueReusableCellWithReuseIdentifier("cell", forIndexPath: indexPath) as CountCollectionViewCell
        cell!.setViewLabel(indexPath)
        return cell!
    }

    //具体点击的哪个cell
    func collectionView(collectionView: UICollectionView, didSelectItemAtIndexPath indexPath: NSIndexPath) {
            textField.text = mUtil.getCharacter(indexPath)
        
    }
    
   
}

最重要的就是相当于android中的getview方法,我们把我们的cell回调给上层得以在界面中显示出来,接下来看看效果






本页内容版权归属为原作者,如有侵犯您的权益,请通知我们删除。
最近因为一个项目的原因需要自定义一个BaseAdapter实现ListVIew单选打勾的功能,虽然听起来很简单,我在网上也 看过一些例子,似乎是实现了,但往往存在一些漏洞。往往漏洞如下 1、网上例子item较少,item增多时漏洞出现,忽略了BaseAdapter中getView()方法中convertView重用的问题 2、忽略了BaseAdapter中getView()方法并不是一下子加载完所有item,上下拖动listview时item会重新加载,getview会重新被调用,所以上下拖动的时候漏洞出
前一段时间阳光小强安装了一个豆瓣客户端,第一次打开就被这种界面风格吸引了,今天早上起来在打开豆瓣听音乐的时候,突然产生一个念头,来试着实现一下这种效果,打开客户端分析了一下发现其实这种效果的实现并不是想象中的那么难,下面我先分析一下这种效果的实现思路,然后一步步解释实现的过程,希望大家能提出意见和建议,一起交流学习。 先给大家展示一下我的成果吧: 其实豆瓣客户端的界面上还有其他的文字和菜单,但是这两个的实现效果和其他几个类似,可以作为代表,所以就不绘制那么多组件了。 转载请说明出处: http://blo
     昨天看了一个名校公开课,讨论大学教育的意义,感悟颇深。我觉得现在国内大学不能和国外大学比最重要一点就是探索精神,如果你不能在大学找到你想要的,你应该远离大学。他只会禁锢你的思想,你应该有广泛的爱好,培养对世界的好奇心。不管是动物植物,物理化学,音乐艺术等。去探索让人们5年后都觉得不可思议的事情。然后把你的探索精神一直保持下去并分享给更多的人。保持肉体和精神上的强壮,这是是我们的力量源泉。 今天我们来做一个非常有趣的东西,下面我们建立一个新的工程。对了,这次的文件图片资源(http://downl
        近来研究了一下如何在一个Activity中合理地显示多种类型的checkBox,效果如下:         1、         2、         3、         【 0分下载源代码 】
因为Unity 采用C# 作为主要语言,代码编译之后作为DLL存在与执行文件中,这就给我们带来很大的一个问题,反编译非常容易。 如何反编译Unity游戏的代码: Unity打包生成的安装包,我们随便下载一个游戏,解压APK,来到 assets\bin\Data\Managed 这个目录。 Assembly-CSharp.dllAssembly-CSharp-firstpass.dll 你在游戏中编写的代码就存放在这两个dll中。 把dll拖放到MonoDevelop中,稍等片刻,就能看到dll中的代码。

Android 屏幕(View)坐标系统 - 2015-04-03 10:04:14

 首先明确一下 android中的坐标系统 :屏幕的左上角是坐标系统原点(0,0),原点向右延伸是X轴正方向,原点向下延伸是Y轴正方向。  一、View的坐标      需要注意view的坐标是相对父容器而言的,包括:getTop()、getBottom(),getLeft(),getRight()。以getTop为例,函数源代码为:  /** * Top position of this view relative to its parent. *相对应父控件的top位置,单位为像素,即头部到父控件的距
1;把NSString切割出某一部分成NSString NSString *firstStr=[ self . textField . text substringWithRange : NSMakeRange ( 0 , 1 )]; 2:切割到数组中 NSArray* dateArray = [dateString componentsSeparatedByString: @"/"];
一 引言:      利用ApkPlug插件化框架将ShareSDK组件化,以实现按需动态加载和减小应用体积的目的。     ShareSDK是非常棒的移动社会化分享和评论工具,相信我们在开发应用过程中都离不开它。但是当我们集成ShareSDK时候同样会遇到一些问题。 1. ShareSDK包比较大,组合国内多家分享平台以后其SDK包的大小应该在1M以上,这对应用来说还是不小的负荷。 2. 集成ShareSDK过程中我们不可避免的需要将它的资源文件复制到应用的res资源目录下,这对我们应用后期维护造成不小
  Android多分辨率适配是一件很有意义但是比较麻烦的事情,网上有很多关于多分辨率适配的文章,多数文章讲解的都是整个APP的图片比较规则,可以将图片做成9图来完成多分辨率适配,但是对于一些游戏类应用(这里说的游戏没有使用游戏引擎)、低龄儿童应用,APP中有很多花哨的图片,这种APP的图片显然无法做成9图,在网上查了很多资料始终没有比较理想的解决方案,结合自己最近做的项目介绍一下针对这种情况下的多分辨率适配: 为了减少UI的工作量,一个APP只提供一套图; 为了减少程序员的重复工作,一个APP只维护一套
写在前面: Android 设备可以接受和安装基于系统和应用的更新。在设备中有一个特殊 recovery 分区,在这个分区中有一套特殊的恢复系统可以将下载的更新包进行解压并应用到系统中去。 本节主要描述了更新包的组织架构,并且概述了如何使用更新包打包工具制作系统升级的更新包。 OTA  的存在是用来对潜在系统的升级,或者在系统分区安装只读(不可卸载)的应用程序,因此在升级过程中不会影响到用于已经安装到系统中的 应用程序。 本节的内容主要基于 Android5.x 版本。   一、Android 设备布局的