2015-11-07 12 views
9

Ich möchte Button in die obere linke Ecke von UICollectionViewCell hinzufügen. Ich bin in der Lage, den Knopf oben links von der Zelle hinzuzufügen, aber es erscheint nicht über der Zelle, sondern unter der Zelle. Bitte sag mir, wie kann ich das machen?Wie füge ich das Bild zur oberen linken Ecke der uicollectionView-Zelle in ios hinzu?

ich unten Code verwende:
enter image description here

_deleteButton = [[UIButton alloc] initWithFrame:CGRectMake(0, 0, delButtonSize, delButtonSize)]; 
    _deleteButton.center = CGPointMake(9, 10); 
    _deleteButton.backgroundColor = [UIColor clearColor]; 

    [_deleteButton setImage: [UIImage imageNamed:@"cross_30.png"] forState:UIControlStateNormal]; 
    [cell addSubview:_deleteButton]; 

    [_deleteButton addTarget:self action:@selector(deleteRecipe:) forControlEvents:UIControlEventTouchUpInside]; 

Edit:
Ich möchte Symbol wie dieses machen löschen:
enter image description here

+0

versuchen zu debuggen von set '_deleteButton.backgroundColor = [UIColor redColor];' Und entfernen Sie diese Zeile '_deleteButton.center = CGPointMake (9, 10);' – anhtu

+0

Und wo behandeln Sie '_deleteButton'? – anhtu

+0

Was meinst du mit .. "Ich bin in der Lage, den Knopf oben links von Zelle hinzuzufügen, aber es erscheint nicht auf der Oberseite der Zelle, sondern unter der Zelle", bitte geben Sie weitere Details ... –

Antwort

2

Haben Sie versucht, das Hinzufügen es zur Inhaltsansicht der Zelle? [cell.contentView addSubview:_deleteButton];

+0

Ja, es funktioniert nicht. – Techiee

0

Ich glaube, Sie werden mit 1-Taste für alle Zellen, versuchen, für 1 Zelle 1-Taste erstellen:

UIButton * deleteButton = [[UIButton alloc] initWithFrame:CGRectMake(0, 0, delButtonSize, delButtonSize)]; 
    deleteButton.center = CGPointMake(9, 10); 
    deleteButton.backgroundColor = [UIColor clearColor]; 

    [deleteButton setImage: [UIImage imageNamed:@"cross_30.png"] forState:UIControlStateNormal]; 
    [cell addSubview:deleteButton]; 
+0

Das ist kein Problem. Dieser Ansatz funktioniert nicht. Ich möchte den Speicherort der Schaltfläche verbessern. – Techiee

1

Stellen Sie sicher, Ihre cross_30 png-Datei 1x Version Größe entspricht delButtonSize

- (UICollectionViewCell *)collectionView:(UICollectionView *)collectionView cellForItemAtIndexPath:(NSIndexPath *)indexPath 
{ 
    //cell = ... 
    UIButton *testButton = [UIButton buttonWithType:UIButtonTypeCustom]; 
    testButton.frame = CGRectMake(0, 0, delButtonSize, delButtonSize); 
    [testButton addTarget:self action:@selector(deleteRecipe:) forControlEvents:UIControlEventTouchUpInside]; 
    testButton.backgroundColor = [UIColor redColor]; 
    [cell.contentView addSubview:testButton]; 
    // ... 
    return cell; 
} 

Es sollte eine Schaltfläche mit redColor oben links auf der Zelle zeigen.

Dieser Code dient nur zu Testzwecken. Im Idealfall möchten Sie keine neue Instanz von UIButton für jede Zelle erstellen. Stattdessen, wo Sie die Zelle in StoryBoard oder in nib Datei erstellen. Fügen Sie dort einen UIButton hinzu. So kann iOS die Zelle mit der Schaltfläche wiederverwenden.

Stellen Sie sicher, dass alle Ansichten (mit Ausnahme der Schaltfläche zum Löschen) in der Zelle über eine linke und obere Auffüllung verfügen. Leertaste links und oben bewirkt, dass die Löschschaltfläche bei origin (0, 0) außerhalb der linken oberen Grenzen der Zelle erscheint.

Es gibt einige andere Möglichkeiten, die die Unterklasse der UIButton beinhalten. Aber diese können zu kniffligen Situationen führen. Ich ziehe es vor, die Ansichten in Ihrer Aufstellung neu zu ordnen.

+0

@deepakKumar Antwort bearbeitet –

1

ich Sie den vollständigen Code geben, wie ich tun würde, was Sie ausführen möchten:

Zunächst einmal eine Unterklasse von UICollectionViewCell erstellen. Nennen wir es CustomCell, und geben Sie eine öffentliche Eigenschaft UIButton namens deleteButton. Dann in CustomCell.m:

#define delButtonSize 60 

// Lazy load the deleteButton 
- (UIButton *)deleteButton 
{ 
    if (!_deleteButton) 
    { 
     _deleteButton = [[UIButton alloc] initWithFrame:CGRectMake(0, 0, delButtonSize, delButtonSize)]; 
     _deleteButton.center = CGPointMake(9, 10); 
     _deleteButton.backgroundColor = [UIColor clearColor]; 

     [self.contentView addSubview:_deleteButton]; 

     [_deleteButton addTarget:self action:@selector(deleteRecipe) forControlEvents:UIControlEventTouchUpInside]; 
    } 

    return _deleteButton; 
} 

// Here we remove all the custom stuff that we added to our subclassed cell 
- (void) prepareForReuse 
{ 
    [super prepareForReuse]; 

    [self.deleteButton removeFromSuperview]; 
    self.deleteButton = nil; 
} 


- (void) deleteRecipe 
{ 
    [[NSNotificationCenter defaultCenter] postNotificationName:@"DeleteCell" object:self]; 
} 

Jetzt in Ihrem Viewcontroller, dies zu tun:

- (UICollectionViewCell *)collectionView:(UICollectionView *)collectionView cellForItemAtIndexPath:(NSIndexPath *)indexPath 
{ 
    CustomCell *cell = (CustomCell *)[collectionView dequeueReusableCellWithReuseIdentifier:@"cell" forIndexPath:indexPath]; 

    //[cell.deleteButton setImage: [UIImage imageNamed:@"cross_30.png"] forState:UIControlStateNormal]; 
    [cell.deleteButton setBackgroundColor:[UIColor blueColor]]; 
    cell.contentView.backgroundColor = [UIColor redColor]; 

    return cell; 
} 


- (void) deleteCell:(NSNotification *)notification 
{ 
    NSIndexPath *indexPath = [self.collectionView indexPathForCell:(CustomCell *)notification.object]; 
    [self.contentData removeObjectAtIndex:indexPath.row]; 
    [self.collectionView deleteItemsAtIndexPaths:@[indexPath]]; 
} 

ich meinen Code getestet, es funktionierte perfekt auf meinem Computer. Hoffe es hilft!

+0

kann Lösch-Schaltfläche nicht anzeigen. – Techiee

+0

Ich kann den Button nicht hinzufügen – Techiee

2

Verwendung bringSubviewToFront in UIView:

[cell bringSubviewToFront:_deleteButton]; 

Referenz: UIView bringSubviewToFront

den Effekt auf der linken oberen Ecke gebunden ist aus der Zelle zu erreichen, sollten Sie Islam Q Antwort folgen, indem sie die DeleteButton des Rahmens bewegen außerhalb Zelle gebunden, und setzen Sie die Clip-Unteransicht der Zelle auf NO.

1

Stellen Sie die center Ihrer button zu {0: 0} und stellen die cell nicht Subviews über seine Grenzen hinaus zu schneiden:

_deleteButton.center = cell.bounds.origin; 
cell.clipsToBounds = NO; 
0

Dies ist ein Stück Kuchen :)

Ich packte dies source code und legen Sie den Layout-Code so hinein. Meine Lösung wird AutoLayout verwenden.

- (UICollectionViewCell *)collectionView:(UICollectionView *)collectionView cellForItemAtIndexPath:(NSIndexPath *)indexPath { 

    // [...] some code from the source code 
    collectionImageView.layer.cornerRadius = 10; 
    collectionImageView.clipsToBounds = YES; 

    cell.backgroundColor = [UIColor clearColor]; 
    cell.clipsToBounds = NO; // display subviews which will be out of bounds 

    CGFloat deleteButtonSize = 20; 

    UIButton *yourButtonView = [UIButton new]; 
    yourButtonView.backgroundColor = [UIColor redColor]; 
    yourButtonView.layer.cornerRadius = deleteButtonSize/2.0; 
// [yourButtonView addTarget:self action:@selector(deleteRecipe:) forControlEvents:UIControlEventTouchUpInside]; 
    [cell addSubview:yourButtonView]; 

    // setup autolayout constraints 
    [yourButtonView setTranslatesAutoresizingMaskIntoConstraints:NO]; 
    [NSLayoutConstraint constraintWithItem:yourButtonView attribute:NSLayoutAttributeWidth relatedBy:NSLayoutRelationEqual toItem:nil attribute:NSLayoutAttributeNotAnAttribute multiplier:1 constant:deleteButtonSize].active = YES; 
    [NSLayoutConstraint constraintWithItem:yourButtonView attribute:NSLayoutAttributeHeight relatedBy:NSLayoutRelationEqual toItem:nil attribute:NSLayoutAttributeNotAnAttribute multiplier:1 constant:deleteButtonSize].active = YES; 

    [NSLayoutConstraint constraintWithItem:yourButtonView attribute:NSLayoutAttributeCenterX relatedBy:NSLayoutRelationEqual toItem:cell attribute:NSLayoutAttributeLeft multiplier:1 constant:deleteButtonSize * 0.2].active = YES; 
    [NSLayoutConstraint constraintWithItem:yourButtonView attribute:NSLayoutAttributeCenterY relatedBy:NSLayoutRelationEqual toItem:cell attribute:NSLayoutAttributeTop multiplier:1 constant:deleteButtonSize * 0.2].active = YES; 
    // deleteButtonSize * 0.2 is the offset here 

    return cell; 
} 

Das Ergebnis sieht wie folgt aus:

enter image description here

0

Ich würde Ihnen vorschlagen, Ihre benutzerdefinierten UICollectionViewCell zu entwerfen, die entsprechend ausgelegt wurde und Wiederverwendung derselben mit bestimmten Kennung.

Verwandte Themen