2015-08-28 1 views
0

J'ai un UITableView qui a une cellule customtableView. Cela a été sous-classé. La tableViewCell a une image, une étiquette et un UIView (voir la capture d'écran ci-jointe) enter image description hereiOS dessin d'une image dans tableView à l'aide de drawrect

Pour faire la ligne je mets un UIView dans la cellule. J'ai créé la ligne dans une classe séparée makeLine.swift en utilisant drawRect et l'ai désignée comme classe pour la vue.

Problème 1: Je souhaite changer la couleur de la ligne en fonction de TableRownumber. J'ai créé un exutoire pour UIView dans la classe customCell. Je suppose que quelque chose doit être fait dans la méthode cellForRowIndexPath - mais je ne sais pas quoi et comment. Je ne veux pas utiliser une image existante pour la ligne

Voici le code pour faire la ligne:

class LoginLine1: UIView { 

    override func drawRect(rect: CGRect) { 
     let context = UIGraphicsGetCurrentContext() 
     CGContextSetLineWidth(context, 2.0) 
     let colorSpace = CGColorSpaceCreateDeviceRGB() 
     let components: [CGFloat] = [107.0/255.0, 107.0/255.0, 107.0/255.0, 1.0] 
     let color = CGColorCreate(colorSpace, components) 
     CGContextSetStrokeColorWithColor(context, color) 
     CGContextMoveToPoint(context, 0, 0) 
     CGContextAddLineToPoint(context, 70, 0) 
     CGContextStrokePath(context) 
    } 
} 

Numéro 2 une fois que cette ligne est fait, je veux faire tapable et segue à la prochaine vueController. J'ai ajouté tapGestureRecognizer à l'UIView (qui a la ligne). J'ai également activé l'interaction utilisateur. La fonction du robinet est la suivante - mais en quelque sorte son ne fonctionne pas

@IBAction func lineTap(sender: AnyObject) { 
    performSegueWithIdentifier("segue", sender: self) 
} 

Répondre

0

Numéro 1

Vous pouvez enregistrer le numéro de la ligne correspondante dans une propriété de la cellule personnalisée, quelque chose comme ceci:

func tableView(tableView: UITableView, didSelectRowAtIndexPath indexPath: NSIndexPath) 
{ 
    var cell = tableView.dequeueReusableCellWithIdentifier("cellIdentifier") as CustomCell 
    cell.rowNumber = indexPath.row 

    ... 

    return cell 
} 

Dans la cellule personnalisée, vous créez quelque chose comme un setter personnalisé pour la propriété, ceci:

var rowNumber : Int { 
    didSet { 
     drawLineWithRowNumber(rowNumber) 
    } 
} 

drawLineWithRowNumber(rowNumber) est la méthode qui appelle la méthode drawRect de votre classe de ligne. De cette façon, vous pouvez passer le numéro de la ligne à la vue qui est responsable de dessiner la ligne. Vous devez toujours implémenter n'importe quelle logique pour sélectionner une couleur de ligne en fonction du numéro de ligne donné.

Numéro 2

Au lieu de faire la ligne tappable, vous pouvez mieux utiliser func tableView(tableView: UITableView, didSelectRowAtIndexPath indexPath: NSIndexPath) pour accéder au contrôleur suivant la vue, à moins que vous avez besoin quand un comportement spécifique sera exploité la ligne.