2016-03-30 17 views
2

私のアプリでは、UITableViewRowActionにタイトルテキストの代わりに画像を使用したいと思います。UITableViewRowAction with image、swift

let edit = UITableViewRowAction(style: .Normal, title: "Edit") { action, index in 
    self.indexPath = indexPath 
    self.performSegueWithIdentifier("toEdit", sender: self) 
} 
edit.backgroundColor = UIColor(patternImage: UIImage(named: "edit")!) 

ただし、何度も画像が表示されます。私は行に1つの画像だけを持って、この問題を解決するにはどうすればよい

enter image description here

+0

画像の代わりにemojisを使用しても問題ない場合は、これを確認してください - > http://stackoverflow.com/a/32735211/767329 –

+0

返信ありがとうございますが、私のアプリではemojisを使いたくありません。ボタンの機能を表す特別なイメージを持っていたいと思っています(これがテキストの代わりにemojisを使いたくない理由です)。 –

+0

問題は解決していますか? @ Vah.Sah –

答えて

1

パターンとして使用されるイメージがスペースに収まらないという問題は、それを埋めるために繰り返されることです。非繰り返しイメージを持っている 1つのオプションはある

  • に一定の高さとその高さに合う
  • 用画像
0

をUITableViewCellのを使用する私はあなたが計算を支援するUITableViewRowActionのサブクラスを書いていますタイトルの長さとrowActionのサイズと画像を渡すだけです。

class CustomRowAction: UITableViewRowAction { 

    init(size: CGSize, image: UIImage, bgColor: UIColor) { 
     super.init() 

     // calculate actual size & set title with spaces 
     let defaultTextPadding: CGFloat = 15 
     let defaultAttributes = [ NSFontAttributeName: UIFont.systemFont(ofSize: 18)] // system default rowAction text font 
     let oneSpaceWidth = NSString(string: " ").size(attributes: defaultAttributes).width 
     let titleWidth = size.width - defaultTextPadding * 2 
     let numOfSpace = Int(ceil(titleWidth/oneSpaceWidth)) 

     let placeHolder = String(repeating: " ", count: numOfSpace) 
     let newWidth = (placeHolder as NSString).size(attributes: defaultAttributes).width + defaultTextPadding * 2 
     let newSize = CGSize(width: newWidth, height: size.height) 

     title = placeHolder 

     // set background with pattern image 

     UIGraphicsBeginImageContextWithOptions(newSize, false, UIScreen.main.nativeScale) 

     let context = UIGraphicsGetCurrentContext()! 
     context.setFillColor(bgColor.cgColor) 
     context.fill(CGRect(origin: .zero, size: newSize)) 

     let originX = (newWidth - image.size.width)/2 
     let originY = (size.height - image.size.height)/2 
     image.draw(in: CGRect(x: originX, y: originY, width: image.size.width, height: image.size.height)) 
     let patternImage = UIGraphicsGetImageFromCurrentImageContext()! 

     UIGraphicsEndImageContext() 

     backgroundColor = UIColor(patternImage: patternImage) 
    } 
} 

私のプロジェクト:CustomSwipeCell詳細を見ることができます。