我正在尝试在 Xcode 6.3 中设计分组样式的 TableView 。我没有像下面附上的第二张图片那样覆盖 table 的矩形框。你能告诉我如何构建一个像第二个那样的屏幕吗?
最佳答案
这里以 iOS7 为例:
https://github.com/yesidi/YipPrettyTableViewCell
编辑:我使用 Swift 制作了一个简单的单元格。
// GroupedTableViewCell.swift
import UIKit
let RADIUS: CGFloat = 5
let InsetX: CGFloat = 20
enum CellPosition : Int {
case Top
case Mid
case Bottom
case TopAndBottom
}
class GroupedTableViewCell: UITableViewCell {
var cellPosition: CellPosition?
override func awakeFromNib() {
super.awakeFromNib()
// Initialization code
}
override func setSelected(selected: Bool, animated: Bool) {
super.setSelected(selected, animated: animated)
// Configure the view for the selected state
}
override func drawRect(rect: CGRect) {
if self.cellPosition != nil {
self.drawMask()
} else {
self.layer.mask = nil
super.drawRect(rect)
}
}
// MARK: - Private methods
func drawMask() {
let maskLayer = CAShapeLayer()
maskLayer.frame = CGRectInset(self.bounds, InsetX, 0)
var path = CGPathCreateMutable()
let minX = CGRectGetMinX(maskLayer.bounds)
let midX = CGRectGetMidX(maskLayer.bounds)
let maxX = CGRectGetMaxX(maskLayer.bounds)
let minY = CGRectGetMinY(maskLayer.bounds)
let midY = CGRectGetMidY(maskLayer.bounds)
let maxY = CGRectGetMaxY(maskLayer.bounds)
if let cellPosition = self.cellPosition {
switch cellPosition {
case .Top:
CGPathMoveToPoint(path, nil, minX, maxY)
CGPathAddArcToPoint(path, nil, minX, minY, midX, minY, RADIUS)
CGPathAddArcToPoint(path, nil, maxX, minY, maxX, maxY, RADIUS)
CGPathAddLineToPoint(path, nil, maxX, maxY)
CGPathCloseSubpath(path)
case .Mid:
CGPathAddRect(path, nil, maskLayer.bounds)
case .Bottom:
CGPathMoveToPoint(path, nil, minX, minY)
CGPathAddArcToPoint(path, nil, minX, maxY, midX, maxY, RADIUS)
CGPathAddArcToPoint(path, nil, maxX, maxY, maxX, minY, RADIUS)
CGPathAddLineToPoint(path, nil, maxX, minY)
CGPathCloseSubpath(path)
case .TopAndBottom:
CGPathMoveToPoint(path, nil, minX, midY)
CGPathAddArcToPoint(path, nil, minX, maxY, midX, maxY, RADIUS)
CGPathAddArcToPoint(path, nil, maxX, maxY, maxX, midY, RADIUS)
CGPathAddLineToPoint(path, nil, maxX, midY)
CGPathAddArcToPoint(path, nil, maxX, minY, midX, minY, RADIUS)
CGPathAddArcToPoint(path, nil, minX, minY, minX, midY, RADIUS)
CGPathCloseSubpath(path)
}
}
maskLayer.path = path
maskLayer.fillColor = UIColor.redColor().CGColor
maskLayer.backgroundColor = UIColor.clearColor().CGColor
self.layer.mask = maskLayer
}
}
现在你可以设置单元格的位置了:
// TableViewController.swift
// MARK: - Table view data source
override func tableView(tableView: UITableView, willDisplayCell cell: UITableViewCell, forRowAtIndexPath indexPath: NSIndexPath) {
assert(cell.isKindOfClass(GroupedTableViewCell.self), "")
let groupedCell = cell as! GroupedTableViewCell
let numberOfRows = tableView.numberOfRowsInSection(indexPath.section) - 1
groupedCell.cellPosition = (indexPath.row == numberOfRows && indexPath.row == 0) ? .TopAndBottom : ((indexPath.row == 0) ? .Top : (indexPath.row == numberOfRows ? .Bottom : .Mid))
}
希望对你有帮助!
关于ios - Swift - 分组样式 TableView 设计,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/30634049/
我有一个模型:classItem项目有一个属性“商店”基于存储的值,我希望Item对象对特定方法具有不同的行为。Rails中是否有针对此的通用设计模式?如果方法中没有大的if-else语句,这是如何干净利落地完成的? 最佳答案 通常通过Single-TableInheritance. 关于ruby-on-rails-Rails-子类化模型的设计模式是什么?,我们在StackOverflow上找到一个类似的问题: https://stackoverflow.co
在控制台中反复尝试之后,我想到了这种方法,可以按发生日期对类似activerecord的(Mongoid)对象进行分组。我不确定这是完成此任务的最佳方法,但它确实有效。有没有人有更好的建议,或者这是一个很好的方法?#eventsisanarrayofactiverecord-likeobjectsthatincludeatimeattributeevents.map{|event|#converteventsarrayintoanarrayofhasheswiththedayofthemonthandtheevent{:number=>event.time.day,:event=>ev
我有一大串格式化数据(例如JSON),我想使用Psychinruby同时保留格式转储到YAML。基本上,我希望JSON使用literalstyle出现在YAML中:---json:|{"page":1,"results":["item","another"],"total_pages":0}但是,当我使用YAML.dump时,它不使用文字样式。我得到这样的东西:---json:!"{\n\"page\":1,\n\"results\":[\n\"item\",\"another\"\n],\n\"total_pages\":0\n}\n"我如何告诉Psych以想要的样式转储标量?解
我正在为一个项目制作一个简单的shell,我希望像在Bash中一样解析参数字符串。foobar"helloworld"fooz应该变成:["foo","bar","helloworld","fooz"]等等。到目前为止,我一直在使用CSV::parse_line,将列分隔符设置为""和.compact输出。问题是我现在必须选择是要支持单引号还是双引号。CSV不支持超过一个分隔符。Python有一个名为shlex的模块:>>>shlex.split("Test'helloworld'foo")['Test','helloworld','foo']>>>shlex.split('Test"
我将应用程序升级到Rails4,一切正常。我可以登录并转到我的编辑页面。也更新了观点。使用标准View时,用户会更新。但是当我添加例如字段:name时,它不会在表单中更新。使用devise3.1.1和gem'protected_attributes'我需要在设备或数据库上运行某种更新命令吗?我也搜索过这个地方,找到了许多不同的解决方案,但没有一个会更新我的用户字段。我没有添加任何自定义字段。 最佳答案 如果您想允许额外的参数,您可以在ApplicationController中使用beforefilter,因为Rails4将参数
这里有一个很好的答案解释了如何在Ruby中下载文件而不将其加载到内存中:https://stackoverflow.com/a/29743394/4852737require'open-uri'download=open('http://example.com/image.png')IO.copy_stream(download,'~/image.png')我如何验证下载文件的IO.copy_stream调用是否真的成功——这意味着下载的文件与我打算下载的文件完全相同,而不是下载一半的损坏文件?documentation说IO.copy_stream返回它复制的字节数,但是当我还没有下
我正在尝试解析一个文本文件,该文件每行包含可变数量的单词和数字,如下所示:foo4.500bar3.001.33foobar如何读取由空格而不是换行符分隔的文件?有什么方法可以设置File("file.txt").foreach方法以使用空格而不是换行符作为分隔符? 最佳答案 接受的答案将slurp文件,这可能是大文本文件的问题。更好的解决方案是IO.foreach.它是惯用的,将按字符流式传输文件:File.foreach(filename,""){|string|putsstring}包含“thisisanexample”结果的
我有带有Logo图像的公司模型has_attached_file:logo我用他们的Logo创建了许多公司。现在,我需要添加新样式has_attached_file:logo,:styles=>{:small=>"30x15>",:medium=>"155x85>"}我是否应该重新上传所有旧数据以重新生成新样式?我不这么认为……或者有什么rake任务可以重新生成样式吗? 最佳答案 参见Thumbnail-Generation.如果rake任务不适合你,你应该能够在控制台中使用一个片段来调用重新处理!关于相关公司
1.错误信息:Errorresponsefromdaemon:Gethttps://registry-1.docker.io/v2/:net/http:requestcanceledwhilewaitingforconnection(Client.Timeoutexceededwhileawaitingheaders)或者:Errorresponsefromdaemon:Gethttps://registry-1.docker.io/v2/:net/http:TLShandshaketimeout2.报错原因:docker使用的镜像网址默认为国外,下载容易超时,需要修改成国内镜像地址(首先阿里
目录前言滤波电路科普主要分类实际情况单位的概念常用评价参数函数型滤波器简单分析滤波电路构成低通滤波器RC低通滤波器RL低通滤波器高通滤波器RC高通滤波器RL高通滤波器部分摘自《LC滤波器设计与制作》,侵权删。前言最近需要学习放大电路和滤波电路,但是由于只在之前做音乐频谱分析仪的时候简单了解过一点点运放,所以也是相当从零开始学习了。滤波电路科普主要分类滤波器:主要是从不同频率的成分中提取出特定频率的信号。有源滤波器:由RC元件与运算放大器组成的滤波器。可滤除某一次或多次谐波,最普通易于采用的无源滤波器结构是将电感与电容串联,可对主要次谐波(3、5、7)构成低阻抗旁路。无源滤波器:无源滤波器,又称