2017-08-30 2 views
0

In UIViewController 1 habe ich ein Array eingerichtet. Diese UIViewController wechselt zu UIViewController 2.Wie übertrage ich Wert von einer ausgewählten Zelle in embedded collectionView zu einem anderen viewController?

In UIViewController 2 gibt es eine UITableView mit benutzerdefinierten UITableViewCell. Es gibt auch eine UIButton, die perfekt zurück zu UIViewController 1 geht.

In der benutzerdefinierten Zelle gibt es eine collectionView. Dies wird durch das Array von ViewController 1 aufgefüllt.

Meine Frage ist, wenn ein Element in der collectionView ausgewählt (UIViewController 2 - custom UITableViewCell Klasse), wie den ganzen Weg, diesen Wert zu überschreiten zurück zu UIViewController 1?

Es tut mir leid, wenn dies wiederholt wird. Ich habe hier viele ähnliche Einträge erwähnt, aber nichts scheint zu funktionieren. Ich habe auch schon versucht, diese:

http://www.appcoda.com/ios-collection-view-tutorial/

- (void)prepareForSegue:(UIStoryboardSegue *)segue sender:(id)sender { 
    if ([segue.identifier isEqualToString:@"showRecipePhoto"]) { 
    NSArray *indexPaths = [self.collectionView indexPathsForSelectedItems]; 
    RecipeViewController *destViewController = segue.destinationViewController; 
    NSIndexPath *indexPath = [indexPaths objectAtIndex:0]; 
    destViewController.recipeImageName = [recipeImages[indexPath.section] objectAtIndex:indexPath.row]; 
    [self.collectionView deselectItemAtIndexPath:indexPath animated:NO]; 
    } 
} 

Ich halte den Null-Wert zurückgegeben bekommen und ich bin mir nicht sicher, warum.

(Ich verwende Storyboard nicht. Und dies ist mein erster Versuch Programmierung jeglicher Art. Jede Eingabe schätzen würde!)

Antwort

0

Sie können UICollectionViewDelegate verwenden.

in Ihrer Klasse hinzufügen:

class YourViewController: UIViewController, UICollectionViewDelegate { ... } 

und verwenden - (void)collectionView:(UICollectionView *)collectionView didSelectItemAtIndexPath:(NSIndexPath *)indexPath dieses Ereignis wird aufgerufen, wenn die Zelle ausgewählt ist; Sie müssen den Wert in einer Eigenschaft speichern. dass wie:

- (void)collectionView:(UICollectionView *)collectionView 
didSelectItemAtIndexPath:(NSIndexPath *)indexPath 
{ 
    selectedRecipeImageName = [recipeImages[indexPath.section] objectAtIndex:indexPath.row]; 
... 
    [self.collectionView deselectItemAtIndexPath:indexPath animated:NO]; 
} 

und dann:

- (void)prepareForSegue:(UIStoryboardSegue *)segue sender:(id)sender { 
    if ([segue.identifier isEqualToString:@"showRecipePhoto"]) { 
    RecipeViewController *destViewController = segue.destinationViewController; 
    destViewController.recipeImageName = selectedRecipeImageName 
    } 
} 
+0

Ja. So einfach, aber ich konnte mich zu dem Zeitpunkt nicht darum kümmern. Übrigens, Entschuldigung für die verspätete Antwort. Ich mache das auf der Seite. Vielen Dank! – veve1127

0

Sie es mit Delegation oder Abschluss-Block entweder zu tun.

Um mit Delegierung zu lösen, folgen Sie bitte dieser link.

Um mit Abschlussblock zu lösen, folgen Sie bitte diesem link.

+0

Willkommen bei SO. Bitte vermeide Link-Only als Antworten. Sie können die Schaltfläche "Flag" verwenden, um als Duplikat zu markieren, wenn Sie der Meinung sind, dass dies bereits beantwortet wurde. –

Verwandte Themen