2015-08-25 3 views
2

Мое приложение включает 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 
+0

Можете вы добавить код для cellForRowAtIndexPath? – Karlos

+0

Я добавил код для 'cellForRowAtIndexPath' в вопрос. Надеюсь, поможет. Не стесняйтесь спрашивать, нужна ли вам дополнительная информация. – paro

+0

http://stackoverflow.com/a/38655903/4928945 –

ответ

3

естественно картина будет повторяться, чтобы заполнить все пространство.

Единственный способ визуализации - увеличить высоту изображения, чтобы превысить максимально возможную максимальную высоту ячейки.


Я использовал этот код и изображение с прозрачным фоном и высотой 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) 
    } 
} 

результат:

enter image description here

enter image description here

С изображением t шляпа имеет непрозрачный фон, он выглядит лучше.

enter image description here


визит GitHub для примера проекта.

+0

Я не знаю, почему, но это не работает для меня. – paro

+0

что не работает? мой код? – vikingosegundo

+0

Хорошо, у меня все получилось. Большое спасибо за вашу помощь! – paro