如何在TableViewController中点击单元格时加载不同的数组?

时间:2016-07-17 06:46:18

标签: ios arrays swift tableview

我一直在寻找好几个小时,似乎无法找到答案。我的swift文件包含超过20个非常长的数组,但我将在这个问题中用简短的类似例子来简化它。

我们说我有一个" A级"使用如下所示的数组:

var mainArray = ["One, "Two", "Three"]

override func viewDidLoad()
{
    super.viewDidLoad()

}

override func didReceiveMemoryWarning()
{
    super.didReceiveMemoryWarning()
}

override func tableView(tableView: UITableView, numberOfRowsInSection section: Int) -> Int {
    return mainArray.count
}

override func tableView(tableView: UITableView, cellForRowAtIndexPath indexPath: NSIndexPath) -> UITableViewCell {
    let cellA = tableView.dequeueReusableCellWithIdentifier("prototype1", forIndexPath: indexPath)
    cellA.textLabel?.text = mainArray[indexPath.row]
    return cellA
}

然后是" B"有多个数组,如:

var arrayOne = ["A", "B", "C"]
var arrayTwo = ["D", "E", "F", "G"]
var arrayThree = ["H", "I"]
var itemArray = [String]()

override func didReceiveMemoryWarning()
{
    super.didReceiveMemoryWarning()
}

override func tableView(tableView: UITableView, numberOfRowsInSection section: Int) -> Int
{
    return itemArray.count
}

override func tableView(tableView: UITableView, cellForRowAtIndexPath indexPath: NSIndexPath) -> UITableViewCell
{
    let cellB = tableView.dequeueReusableCellWithIdentifier("prototype2", forIndexPath: indexPath)
    cellB.textLabel?.text = itemArray[indexPath.row]
    return cellB
}

我一直想弄清楚的是如何选择要显示的特定阵列。

例如,在这种情况下,我想点击带有标签' Two'在主阵列中,并且segue到第二个视图控制器(B类)并显示标记为的四个单元格:

d

电子

˚F

分别

如果有人能帮助我,我会非常感激。

2 个答案:

答案 0 :(得分:0)

在B类中定义一个属性(如下面的代码),然后在打开类集之前设置该值为1或2或3的属性。

   public var arrayNumber : Int?

然后在numberOfRowsInSectioncellForRowAtIndexPath根据该属性的值(arrayNumber)决定使用其中一个arrayOnearrayTwoarrayThree

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

if arrayNumber == 1
    return arrayOne.count
else if arrayNumber == 2
    return arrayTwo.count
else 
    return arrayThree.count
}

override func tableView(tableView: UITableView, cellForRowAtIndexPath indexPath: NSIndexPath) -> UITableViewCell
{
    let cellB = tableView.dequeueReusableCellWithIdentifier("prototype2", forIndexPath: indexPath)

    if arrayNumber == 1
        cellB.textLabel?.text = arrayOne[indexPath.row]
    else if arrayNumber == 2
        cellB.textLabel?.text = arrayTwo[indexPath.row]
    else 
       cellB.textLabel?.text = arrayThree[indexPath.row]    

return cellB
}

如果每个阵列的设计不同,则应将dequeueReusableCellWithIdentifier分开。

答案 1 :(得分:0)

定义变量如下

override func tableView(tableView: UITableView, numberOfRowsInSection section: Int) -> Int
{
    switch (arrayChoice){
    case 1:
        //return no of items in array 1
    case 2:
        //return no of items in array 2
    default:
        p//return no of items in default condition
    } 
}

override func tableView(tableView: UITableView, cellForRowAtIndexPath indexPath: NSIndexPath) -> UITableViewCell
{
switch (arrayChoice){
    case 1:
        let cellA = tableView.dequeueReusableCellWithIdentifier("cell", forIndexPath: indexPath)
    cellA.textLabel?.text = itemArray[indexPath.row]
    return cellA
    case 2:
let cellB = tableView.dequeueReusableCellWithIdentifier("cell", forIndexPath: indexPath)
    cellB.textLabel?.text = itemArray[indexPath.row]
    return cellB

    default:
        let cellDefault = tableView.dequeueReusableCellWithIdentifier("cell", forIndexPath: indexPath)
    cellDefault.textLabel?.text = itemArray[indexPath.row]
    return cellDefault
    }
}

此变量将控制在tableview中加载哪个数组

然后在tableview委托方法中执行以下操作

[textView setScrollEnabled:NO];

这只是为了让您了解如何解决您的情况。在加载表之前,请确保已选择要加载的单元格。

希望这会有所帮助......