自定义 table 查看行操作(图片)
Custom table view row action (image)
我的应用包含一个 UITableView。它的单元格可以选择显示多行。单元格还有一个自定义行操作(图像)。我这样设置行动作图像:
let date = UITableViewRowAction(style: UITableViewRowActionStyle.Default, title: "", handler: { (action, indexPath) -> Void in})
date.backgroundColor = UIColor(patternImage: UIImage(named: "rowActionPic")!)
图像的分辨率为 122x94。如果单元格显示一行,则一切都完美。如果单元格显示 2 行或更多行,则图像将显示 2 次。是否有让图片居中的选项?
cellForRowAtIndexPath
中的代码:
cell.textLabel?.numberOfLines = 0
let object = self.fetchedResultsController.objectAtIndexPath(indexPath) as! NSManagedObject
cell.textLabel?.text = object.valueForKey("name") as? String
自然会重复一个模式来填充所有space。
我成像的唯一方法是增加图像的高度以超过最可能的最大单元格高度。
我使用了这段代码和一张背景透明、高度为 120px 的图片,其中图标占据了前 44x44 像素
import UIKit
class ViewController: UITableViewController {
override func numberOfSectionsInTableView(tableView: UITableView) -> Int {
return 1
}
override func tableView(tableView: UITableView, numberOfRowsInSection section: Int) -> Int {
return 30
}
override func tableView(tableView: UITableView, cellForRowAtIndexPath indexPath: NSIndexPath) -> UITableViewCell {
let cell = tableView.dequeueReusableCellWithIdentifier("cell", forIndexPath: indexPath) as! UITableViewCell
cell.textLabel?.text = "\(indexPath.row)"
return cell
}
override func tableView(tableView: UITableView, editActionsForRowAtIndexPath indexPath: NSIndexPath) -> [AnyObject]? {
let moreClosure = { (action: UITableViewRowAction!, indexPath: NSIndexPath!) -> Void in
println("More closure called")
}
let moreAction = UITableViewRowAction(style: .Normal, title: " ", handler: moreClosure)
if let image = UIImage(named: "star.png"){
moreAction.backgroundColor = UIColor(patternImage: image)
}
return [moreAction]
}
override func tableView(tableView: UITableView, commitEditingStyle editingStyle: UITableViewCellEditingStyle, forRowAtIndexPath indexPath: NSIndexPath) {
}
override func tableView(tableView: UITableView, heightForRowAtIndexPath indexPath: NSIndexPath) -> CGFloat {
return min((44.0 * CGFloat(indexPath.row) + 1), 120.0)
}
}
结果:
使用不透明背景的图像看起来更好。
访问 GitHub 获取示例项目。
我的应用包含一个 UITableView。它的单元格可以选择显示多行。单元格还有一个自定义行操作(图像)。我这样设置行动作图像:
let date = UITableViewRowAction(style: UITableViewRowActionStyle.Default, title: "", handler: { (action, indexPath) -> Void in})
date.backgroundColor = UIColor(patternImage: UIImage(named: "rowActionPic")!)
图像的分辨率为 122x94。如果单元格显示一行,则一切都完美。如果单元格显示 2 行或更多行,则图像将显示 2 次。是否有让图片居中的选项?
cellForRowAtIndexPath
中的代码:
cell.textLabel?.numberOfLines = 0
let object = self.fetchedResultsController.objectAtIndexPath(indexPath) as! NSManagedObject
cell.textLabel?.text = object.valueForKey("name") as? String
自然会重复一个模式来填充所有space。
我成像的唯一方法是增加图像的高度以超过最可能的最大单元格高度。
我使用了这段代码和一张背景透明、高度为 120px 的图片,其中图标占据了前 44x44 像素
import UIKit
class ViewController: UITableViewController {
override func numberOfSectionsInTableView(tableView: UITableView) -> Int {
return 1
}
override func tableView(tableView: UITableView, numberOfRowsInSection section: Int) -> Int {
return 30
}
override func tableView(tableView: UITableView, cellForRowAtIndexPath indexPath: NSIndexPath) -> UITableViewCell {
let cell = tableView.dequeueReusableCellWithIdentifier("cell", forIndexPath: indexPath) as! UITableViewCell
cell.textLabel?.text = "\(indexPath.row)"
return cell
}
override func tableView(tableView: UITableView, editActionsForRowAtIndexPath indexPath: NSIndexPath) -> [AnyObject]? {
let moreClosure = { (action: UITableViewRowAction!, indexPath: NSIndexPath!) -> Void in
println("More closure called")
}
let moreAction = UITableViewRowAction(style: .Normal, title: " ", handler: moreClosure)
if let image = UIImage(named: "star.png"){
moreAction.backgroundColor = UIColor(patternImage: image)
}
return [moreAction]
}
override func tableView(tableView: UITableView, commitEditingStyle editingStyle: UITableViewCellEditingStyle, forRowAtIndexPath indexPath: NSIndexPath) {
}
override func tableView(tableView: UITableView, heightForRowAtIndexPath indexPath: NSIndexPath) -> CGFloat {
return min((44.0 * CGFloat(indexPath.row) + 1), 120.0)
}
}
结果:
使用不透明背景的图像看起来更好。
访问 GitHub 获取示例项目。