IOS-笔记14(UITextField,UITableView)

UITextField

      这是用户可编辑的文本域,通过给它发送.becomeFirstResponder可以自动唤出键盘。发送.resignFirstResponder使键盘回去。

      他的最重要的代理方法是textFieldShouldReturn(sender: UITextField)。它决定当按下return键后执行的操作,一般首先要进行的操作就是让键盘回去。

      还有一些属性,比如是否大写之类的,这些就查文档吧。

UITableView

      这是一个1维表格,table header,(section header,section,section footer),table footer,在每个section里就是table cell了。

      对每一个table cell有4种样式,subtitle,basic,right detail,left detail。当然也可以自定义。

      表格可以是动态的,也可以是静态的,静态的表格更像是起区域分割的作用,每一个cell里你可以继续放置其他类型的控件。动态的你只需要创建一个模板。

      对于自定义的cell,你不可能每一行的控件都拖到代码里去创建outlet。这时你需要创建一个UITableViewCell的子类。

      tableView里delegate负责控制列表的显示,dataSource负责提供数据并显示在每个cell里。

      如果你不在代码里设置行高,系统会自动使用StoryBoard里的高度。如果你设置了rowHeight = UITableViewAutomaticDimension,则行高自动适应。在这种情况下你还需要设置estimatedRowHeight。

<span style="white-space:pre">	</span>tableView.estimatedRowHeight = tableView.rowHeight
        tableView.rowHeight = UITableViewAutomaticDimension

      UITableViewController自动将自己设置为UITableView的dataSource和delegate。

      如果一个UITableView的视图控制器是一个普通的ViewController,在storyboard中使用拖拽的方法,将tableView拖到ViewController来将其设置为tableView的dataSource和delegate。

      dataSource:

      当你的表格是动态的时候,你需要实现数据源的协议,包括三个方法:有多少个sections,每个section里有几行,每个cell的样式是什么。这个样式必须是个UITableViewCell或者你自己创建的他的子类。对于section,你可以不实现这个方法,默认值为1。对于row,没有默认值,必须实现这个方法。

    override func numberOfSectionsInTableView(tableView: UITableView) -> Int {
        return tweets.count
    }

    override func tableView(tableView: UITableView, numberOfRowsInSection section: Int) -> Int {
        return tweets[section].count
    }

    //这里使用的是默认的Cell样式,直接复写它给的方法就好
    override func tableView(tableView: UITableView, cellForRowAtIndexPath indexPath: NSIndexPath) -> UITableViewCell {
        let cell = tableView.dequeueReusableCellWithIdentifier("Tweet", forIndexPath: indexPath) as! UITableViewCell

        // Configure the cell...
        let tweet = tweets[indexPath.section][indexPath.row]
        cell.textLabel?.text = tweet.userText
        cell.detailTextLabel?.text = tweet.userName

        return cell
    }
       对于每个section的header和footer你需要使用方法tableView(UITableView, titleFor{Header or Footer}InSection: Int) -> String来设置,如果字符串不能满足你,那就使用delegate提供一个UIView

      当点击一个行时也许你想转到另外一个场景,这时你需要使用segue,但你并不知道你点击的是那一行。这时你就需要使用prepareForSegue的sender参数,它爸你点击的这个cell也传了进来。调用.indexPathForCell(cell)方法即可获得它的索引,通过这个索引再获得他的数据,来创建你想转换到的View。

      delegate:

      这个协议通常用于决定如何显示表格。当表格某一行被选中时,它会调用tableView(UITableview,didSelectRowAtIndexPath: NSIndexPath)。当然你可以使用上面提到的segue。在每一个Cell里你可以添加一个叫Detail Disclosure的小图标,点击时delegate也有一个对应的方法,和上面一样,参数不一样。同样你也可以使用segue。

      当你的全部数据需要更新时,调用reloadData()方法。部分数据需要更新时则调用reloadRowsAtIndexPaths()。

      delegate也可以控制行高,还是tableView方法。

      UILable的显示行数如果设置成0,那就是自适应多少行。      

     注意如果是像上面那样使用一个普通的ViewController来作为tableView的dataSource和delegate,那么同样要在viewController里实现上面那些需要实现的方法来设置好tableView,且在这时这些方法你得自己敲进去木有提示,因为并不是复写父类的方法。

      如果你需要下拉刷新列表,那么在StoryBoard里选择tableViewController,打开refresh。这时在文档结构里就会出现refresh control,拖到代码里写函数即可。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值