美文网首页
iOS中UITableView使用总结

iOS中UITableView使用总结

作者: 凌云壮志几多愁 | 来源:发表于2015-07-24 23:42 被阅读964次

    1.比如每个cell中有一个button,当点击这个button的时候需要知道当前点击的是哪一行

    我解决这个问题的方法是:自定义一个cell,继承与UITableViewCell,并为这个cell创建一个协议如下,协议方法中将自己当作参数使用,如下:

    @protocol InteractionTableViewCellDelegate

    @required -(void)InteractionTableViewCell:(InteractionTableViewCell *)cell;

    @end

    在Objective-c中(在swift中不存在这个问题)因为代码顺序的问题,你需要在上方加一个@class(苹果写协议的方式),或者你可以使用你习惯的方式。

    然后在你的button方法中实现

    - (IBAction)onJoinToActivity:(UIButton *)sender {

          [self.delegate InteractionTableViewCell:self];

    }

    最后在你需要实现协议的控制器中,调用便可以了

    - (void)InteractionTableViewCell:(InteractionTableViewCell *)cell{

       NSIndexPath *indexPath = [self.tableView indexPathForCell:cell];

    }

    2.对于你的项目有类型不同的cell的时候,或者只有一个cell和其他cell不同的时候

    我推荐的做法是:(1)你可以使用不同重用标识符,(2)如果只有一个cell不同的时候你可以,根据indexPath,不用到重用队列中去取,可以通过indexPath去取一个cell,比如:

    通过不同的方法来获取cell

    这个方法可以用来解决:cell不同导致的视图混乱的问题,如果很多cell类型不同,你可以选择不同的重用标识符。

    3.使用Static TableView Controller遇到的坑

    对于在StoryBoard中使用StaticTableViewController处理一些静态页面是很好的选择(我这里静态的意思当cell固定的时候,并不一定内容也要固定)。然后使用StaticTableViewController的坑也不在少数。

    (1),如果你想在StoryBoard中使用StaticTabelView,必须使用TableViewController.

    (2),在TableViewController中,self.view既是self.tableView,打印self.view和self.tableVIew的结果都为UITableView,但是view的尺寸也是固定不能修改的

    (3),在static cell中修改,tableview高度的方法:

    override func tableView(tableView: UITableView, heightForRowAtIndexPath indexPath: NSIndexPath) -> CGFloat {

    if indexPath.section == 1 && indexPath.row == 3 {

    return CGFloat.min

    }else {

    return super.tableView(tableView, heightForRowAtIndexPath: indexPath)

    }

    }

    看到上面的坑,如果你想在当前界面上面添加一个视图或者控件的话就非常麻烦,所以在这里我问了填这个坑,使用StoryBoard中的一个控件:ContainerView,这样就可以非常简单的解决这个问题了。

    使用containerView使StaticTable共存

    4.关于设置TableView行高的问题

    我这里并不会对于cellheight进行高谈阔论,只是一些需要注意的点而已,如果你是固定行高,self.tableView.rowHeight = 50请使用这种方法。如果你是可变行高的话,我建议需要将行高缓存到一个字典中。tableView需要知道高度的和才能确定自己的contentSize。所以在最一开始的时候,tableView会将所有的cell高度算出来,然后再运行当前可见cell的数量的次数。也就是说:比如,你的tableview有10个cell,但是当前可见的cell只有两个,会运行10次函数:

    override func tableView(tableView: UITableView, heightForRowAtIndexPath indexPath: NSIndexPath) -> CGFloat {

    }

    然后再运行两次这个函数,所以为了更好的性能有必要对高度进行缓存。记得在适当的时候对这个缓存进行清理。

    5.改变tableView的分割线样式

    1.可以使用系统的改变分割线样式方法

    override func layoutSubviews() {

           super.layoutSubviews()

           for view in self.subviews{

           if view.classForCoder.description() =="_UITableViewCellSeparatorView"{

                 var viewOther = view as UIView

                 //这里表示可以对Cell的分割线单独进行隐藏

                 viewOther.hidden=true

            }

    }

    }

    相关文章

      网友评论

          本文标题:iOS中UITableView使用总结

          本文链接:https://www.haomeiwen.com/subject/dwbjqttx.html