2015-06-09 34 views
0

在2個viewcontrollers和detailviewcontroller上有兩個tableviews有問題,一切幾乎都可以正常工作,2個tableviews像一個魅力一樣工作,但問題是在secondviewcontroller中,我把圖像數組放到detailVC之後餐點/食物點擊,我得到了墨西哥食物,西班牙食物,意大利,克羅地亞和法國相同的3張圖片。圖像(15)確實對應於15餐。我在第二個視圖控制器中放置圖像陣列時出錯了嗎?謝謝Swift - 2 tableviews和detailviewcontroller

1 2 3

的ViewController

import UIKit 

class ViewController: UIViewController, UITableViewDelegate, UITableViewDataSource{ 

let textForFirstTableView = ["Italian food", "Mexican food", "Croatian food", "Spanish food", "French food"] 

let namesOfFood = [["Bolognese", "Milagnese","Pizza"], 
        ["Tortilla", "Chimichanga", "Paella"], 
        ["Burek od mesa","Grah", "Janjetina"], 
        ["Tapas", "Churros", "Flan"], 
        ["Buche de Noel", "Cherry Cake", "Onion Soup"]] 

var ObjectNamesOfFood = [String]() 

@IBOutlet weak var tableView: UITableView! 
override func viewDidLoad() { 
    super.viewDidLoad() 
    // Do any additional setup after loading the view, typically from a nib. 

    self.tableView.delegate = self 
    self.tableView.dataSource = self 
} 

override func didReceiveMemoryWarning() { 
    super.didReceiveMemoryWarning() 
    // Dispose of any resources that can be recreated. 
} 

func tableView(tableView: UITableView, numberOfRowsInSection section: Int) -> Int { 

    return textForFirstTableView.count 

} 

func tableView(tableView: UITableView, cellForRowAtIndexPath indexPath: NSIndexPath) -> UITableViewCell { 

    let cell:UITableViewCell = tableView.dequeueReusableCellWithIdentifier("cell") as! UITableViewCell 

    cell.textLabel?.text = textForFirstTableView[indexPath.row] 

    return cell 

} 

func tableView(tableView: UITableView, didSelectRowAtIndexPath indexPath: NSIndexPath) { 

    self.ObjectNamesOfFood = self.namesOfFood[indexPath.row] 

    self.performSegueWithIdentifier("Segue", sender: self) 

} 

override func prepareForSegue(segue: UIStoryboardSegue, sender: AnyObject?) { 

    let driver = segue.destinationViewController as! DrugiViewController 

    var whatToPass = self.ObjectNamesOfFood 

    driver.arrayToPass = whatToPass 


} 
} 

SecondViewController

import UIKit 

class DrugiViewController: UIViewController, UITableViewDelegate, UITableViewDataSource { 

var arrayToPass:[String] = [String]() 

var picturesForEachMeal = ["1","2","3","4","5","6","7","8","9","10","11","12","13","14","15"] 

var objectpicturesForEachMeal:String! 


@IBOutlet weak var tableView2: UITableView! 
override func viewDidLoad() { 
    super.viewDidLoad() 

    // Do any additional setup after loading the view. 

    self.tableView2.delegate = self 
    self.tableView2.dataSource = self 
} 

override func didReceiveMemoryWarning() { 
    super.didReceiveMemoryWarning() 
    // Dispose of any resources that can be recreated. 
} 

func tableView(tableView: UITableView, numberOfRowsInSection section: Int) -> Int { 

    return arrayToPass.count 
} 

func tableView(tableView: UITableView, cellForRowAtIndexPath indexPath: NSIndexPath) -> UITableViewCell { 

    let cell:UITableViewCell = tableView.dequeueReusableCellWithIdentifier("cell2") as! UITableViewCell 

    cell.textLabel?.text = arrayToPass[indexPath.row] 

    return cell 

} 

func tableView(tableView: UITableView, didSelectRowAtIndexPath indexPath: NSIndexPath) { 

    self.objectpicturesForEachMeal = self.picturesForEachMeal[indexPath.row] 

    self.performSegueWithIdentifier("toDetailViewController", sender: self) 

} 

override func prepareForSegue(segue: UIStoryboardSegue, sender: AnyObject?) { 

    let driver = segue.destinationViewController as! DetailViewController 

    driver.picturesToRetrieve = objectpicturesForEachMeal 

} 
} 

DetailViewController(顯示爲15餐15幅圖像)

import UIKit 

class DetailViewController: UIViewController { 

@IBOutlet weak var backgroundImage: UIImageView! 

@IBOutlet weak var slika: UIImageView! 

var picturesToRetrieve:String! 

override func viewDidLoad() { 
    super.viewDidLoad() 

    // Do any additional setup after loading the view. 

    var connection = self.picturesToRetrieve 
    self.slika.image = UIImage(named: connection) 

} 

override func didReceiveMemoryWarning() { 
    super.didReceiveMemoryWarning() 
    // Dispose of any resources that can be recreated. 
} 
} 
+0

我迷惑,你的應用程序有5個國家,表視圖1通第二視圖控制器1和5之間的指數,第二視圖控制器始終有3個盤子,因此它總是將1和3之間的值傳遞給視圖控制器。所以你在第二個視圖控制器中唯一能看到的就是前三個盤子 – Icaro

+0

對,我有15個食物對應5個國家,意大利有3個,墨西哥有自己的3個,西班牙有自己的3個等等,以及如何顯示每個食物的圖像,我有15個圖像,只顯示3。因此,當我點擊墨西哥食物,然後點擊玉米餅,如何顯示tortilja圖片,它只顯示索引0,1,2的圖像陣列,如何顯示15個圖像到每個食物,ty – Igy

+0

我把一個解釋請告訴我如何爲您的實施實施修復措施,以及如何解決問題。我希望你能夠明白。 – Icaro

回答

1

在視圖控制器存儲選定的索引,並將其傳遞給DrugiViewController

func tableView(tableView: UITableView, didSelectRowAtIndexPath indexPath: NSIndexPath) { 
    self.ObjectNamesOfFood = self.namesOfFood[indexPath.row] 
    self.selectedKitchen = indexPath.row 
    self.performSegueWithIdentifier("Segue", sender: self) 
} 

在DrugiViewController計算每種食物圖像索引

func tableView(tableView: UITableView, didSelectRowAtIndexPath indexPath: NSIndexPath) { 
    var totalIndex = (indexPath.row) + (selectedKitchen * 3) 
    self.objectpicturesForEachMeal = self.picturesForEachMeal[totalIndex] 
    self.performSegueWithIdentifier("toDetailViewController", sender: self) 
} 

就是這樣

+0

它的工作原理,驚人的智慧:)謝謝你很多 – Igy

1

我必須說,如果你開始一個應用程序開始你應該在你的情況下使用包含關鍵國家的數組字典,並作爲結果在第一個字典菜和照片的數組,視圖控制器。 在第二個視圖控制器中,您應該有一個包含菜餚和照片的字典數組。 在第三個視圖中,只是一個簡單的字典,其中包含帶有菜餚和照片的字典。

但是您幾乎完成更簡單的解決方案的方法是將值從第一個表格傳遞到第二個表格,因此可以說用戶選擇了您傳遞的第2行並保留該值。

現在在第二個表格中,如果用戶選擇第3行,您將用戶選擇的行的編號乘以(3)第一行的編號在表格視圖中選擇一(2),並且您知道必須顯示最終陣列中的圖片編號6。

我希望這可以幫助你,我相信現在你知道你的想法,你將能夠完成你的項目。祝你好運!

第一視圖控制器:

var rowSelected:Int? 
func tableView(tableView: UITableView, didSelectRowAtIndexPath indexPath: NSIndexPath) { 
    self.ObjectNamesOfFood = self.namesOfFood[indexPath.row] 
    self.rowSelected = indexPath.row 
    self.performSegueWithIdentifier("Segue", sender: self) 
} 
override func prepareForSegue(segue: UIStoryboardSegue, sender: AnyObject?) { 
    let driver = segue.destinationViewController as! DrugiViewController 
    var whatToPass = self.ObjectNamesOfFood 
    driver.arrayToPass = whatToPass 
    driver.rowSelected = rowSelected 
} 

二視圖控制器:

var rowSelected:Int? 
func tableView(tableView: UITableView, didSelectRowAtIndexPath indexPath: NSIndexPath) { 
    self.objectpicturesForEachMeal = self.picturesForEachMeal[indexPath.row * self.rowSelected] 
    self.performSegueWithIdentifier("toDetailViewController", sender: self) 
} 

這是基本的想法,對不起,我不能測試它作爲我在Windows計算機現在,而應該只是工作

+0

非常感謝,但你的回答更容易理解,我是一個初學者,我已經幾乎與這個應用程序混淆了,thx再次嘗試提供幫助,所以如果我將圖像陣列移到第一個視圖控制器,那麼我也遇到了一個問題,如何「合併」索引0-15索引0-5在名稱,是啊,問題的數組.. – Igy

+0

只是忘記第一部分和實施第二,傳遞行號從vc1到vc2,將你傳遞的行號與vc2中選擇的新行號相乘,並傳遞給你的視圖,現在你有正確的值 – Icaro

+0

對不起,打擾你,我googled如何快速傳遞行號,但不能找到任何相關的東西,我從來沒有這樣做過,特別是乘以行。 – Igy