2016-07-29 9 views
1
klicken

Mein Ziel ist es, einen Rahmen zu erstellen, wenn ein Benutzer auf eine Zelle klickt.So fügen Sie einen Rahmen zu einer Zelle hinzu, wenn Sie auf

Dieser Code unten funktioniert:

func collectionView(collectionView: UICollectionView, didSelectItemAtIndexPath indexPath: NSIndexPath) { 
    print("Cell \(indexPath.row) selected") 
} 

Dann habe ich diesen Code, um die Grenze farbig zu machen, aber es hatte keine Wirkung.

func collectionView(collectionView: UICollectionView, didSelectItemAtIndexPath indexPath: NSIndexPath) { 
    let cell : MKStandItemAdd = collectionView.dequeueReusableCellWithReuseIdentifier("ItemCell", forIndexPath: indexPath) as! MKStandItemAdd 
    cell.layer.borderWidth = 7 
    cell.layer.borderColor = UIColor.blueColor().CGColor 
    print("Cell \(indexPath.row) selected") 
} 

Dieser Code oben druckt noch, aber es änderte nicht die Farbe.

so fügte ich hinzu:

self.collectionView.reloadData() 

Aber jetzt überhaupt nichts passiert. Es wird nicht mehr gedruckt und die Sammlung wird nicht erneut geladen.

+2

nicht nennen reload gefunden(). Laden Sie eine bestimmte Zelle neu. –

+1

Wenn Sie auf Zelle klicken. Diesen Index speichern und dann nach dem Index einen Rahmen in der 'cellForItemAtIndexPath'-Methode erstellen –

+0

Versuchen Sie,' cell.layer.masksToBounds = YES; ' – iSashok

Antwort

0

Dies ist die einfache Lösung, die ich nach dem Lesen der ersten 2 Kommentare

let cell = self.collectionView.cellForItemAtIndexPath(indexPath) 
    cell!.layer.borderWidth = 7 
    cell!.layer.borderColor = UIColor.blueColor().CGColor 
0

Direkt auf Zelle auf didSelectItemAtIndexPath eingestellt wird nicht da, wenn Sie die Zelle neu laden oder scrollen.

Der bessere Weg, dies zu tun, ist in Ihrem cellForRowAtIndexPath, wo die Zelle gerendert wird.

Zuerst müssen wir eine Klasse haben variable

var selectedRow = -1 

Also in Ihrem cellForRowAtIndexPath Sie müssen für den ausgewählten Zeilenindex

// check if selected 
if indexPath.row == selectedRow { 
    cell.layer.borderWidth = 7 
    cell.layer.borderColor = UIColor.blueColor().CGColor 
} 
else { 
    cell.layer.borderWidth = 0 
} 

in Ihrem didSelectRowAtIndexPath überprüfen müssen die Zelle neu zu laden

tableView.reloadRowsAtIndexPaths([indexPath], withRowAnimation: true) 
0

In cellfotitemAtIndexPath schreiben

if(cell.isselected) 
{ 
cell.layer.borderWidth = 7 
    cell.layer.borderColor = UIColor.blueColor().CGColor 
} 
else 
{ 
//No border and no border color 
} 

in DidSelectitemAtIndexPath

neu laden Sie Sammlung Ansicht

Verwandte Themen