2016-07-13 9 views
0

Ich habe eine App mit 12 Zellen in einem UICollectionView. Ich will, dass, wenn der Benutzer auf jede der Zellen klickt sollte es die entsprechenden Websites in einem öffnen WebView wie das erste sollte facebook öffnen ein anderes sollte Twitter usw. öffnen.Wie man mehrere Webviews/URLs unter einem UiViewController zeigt, wenn der Benutzer auf verschiedene Zellen klickt

Der Code zum Erstellen der Zellen in der UICollectionView ist unten ich muss wissen, wie ich ein Array erstellen kann von URLs und übergeben Sie es an alle Zellen, um die Websites anzuzeigen.

func collectionView(collectionView: UICollectionView, numberOfItemsInSection section: Int) -> Int { 
    return self.category.count 
} 

func collectionView(collectionView: UICollectionView, cellForItemAtIndexPath indexPath: NSIndexPath) -> UICollectionViewCell { 

    let cell = collectionview.dequeueReusableCellWithReuseIdentifier("cell", forIndexPath: indexPath) as! CollectionViewCell1 

    cell.imageopenview.image = self.imagearray[indexPath.row] 

    cell.titlelabel .text = self.category[indexPath.row] 


    return cell 

Antwort

0

Sie müssen eine Reihe von URLs halten ähnlich, wie Sie eine imagearray und categoryarray haben. Sie werden diese URLs an der Stelle erstellen, an der Sie Ihre Kategorien und Bilder erstellen, vermute ich.

Ich empfehle auch Swift CamelCase Benennungskonventionen für Variablen (zum Beispiel, ImageArray 'und' KategorieArray ').

Da jede Zelle in Ihrer Sammlungsansicht eine eindeutige Einheit mit einem Bild, einem Kategorietitel und einer URL ist, ist es sinnvoll, ein einzelnes Array von Strukturen anstelle von drei separaten Arrays zu speichern.

struct SocialMediaSite { 
    var image: UIImage 
    var title: String 
    var URL: NSURL 
} 

Wenn Sie dies tun, dann in Ihrem View-Controller können Sie nur ein einzelnes Array halten: data: [SocialMediaSite]. Stellen Sie sicher, dass Sie dieses Array mit den entsprechenden Daten an denselben Stellen festlegen, an denen Sie die Arrays für Bilder und Kategorien festgelegt haben. Hier müssen Sie auch die URLs für die Websites festlegen, denen die einzelnen Zellen entsprechen sollen. Sie erstellen ein NSURL mit NSURL(string: "http://www.somesite.com") und speichern es in der Variablen URL.

ein einzelnes Datenarray, Ihre Funktion (nach Swift Namenskonventionen auch) wird wie folgt aussehen:

func collectionView(collectionView: UICollectionView, cellForItemAtIndexPath indexPath: NSIndexPath) -> UICollectionViewCell { 
    let cell = collectionview.dequeueReusableCellWithReuseIdentifier("cell", forIndexPath: indexPath) as! CollectionViewCell1 

    cell.imageOpenView.image = data[indexPath.row].image 
    cell.titleLabel .text = data[indexPath.row].title 

    return cell 
} 

Diese Ihre Zellen in der UICollectionView angezeigt werden, wie Sie zur Zeit der Dinge haben. Um nun eine Anfrage auf eine Website in Ihrem UIWebView zu laden, wenn Sie auf eine Zelle tippen, müssen Sie eine weitere der UICollectionViewDelegate Methoden implementieren: func collectionView(collectionView: UICollectionView, didSelectItemAtIndexPath indexPath: NSIndexPath). Dies wird immer dann aufgerufen, wenn ein Benutzer auf eine Zelle klickt.

In dieser Funktion könnte tun Sie etwas wie folgt:

func collectionView(collectionView: UICollectionView, didSelectItemAtIndexPath indexPath: NSIndexPath) { 
    let selectedCellData = data[indexPath.row] 

    let url = selectedCellData.URL // This is the website you want to go to for the cell you just tapped 
    webView.loadRequest(NSURLRequest(URL: url)) // Tell the webView to load this URL 

    ... 
} 

Sie auch Ihre View-Controller werden die Delegierten des UIWebView betrachten möchten, die, wenn Sie irgendwelche Aktionen ausführen möchten, während der Web-Seite Laden oder wenn beim Laden der Webseite für diese URL ein Fehler aufgetreten ist.

+0

Vielen Dank dafür. Ich werde weitermachen und es ausprobieren und meinen Beitrag aktualisieren. Ich bin ein Anfänger, also entschuldige meine Fehler. Thnx für die Hilfe – Nilesh