如何为每个单元格创建一个具有不同详细视图的tableView

时间:2014-12-12 13:00:11

标签: ios uitableview swift tableview tablecell

我写了:

    func initializeMyDictionary() {
            self.example = [MyDictionary(name: "Some Name", text: "some text", link: "linkToSomeDocument"),
MyDictionary(name: "Second Name", text: "some text", link: "secondLink")]
        }

    func tableView(tableView: UITableView, cellForRowAtIndexPath indexPath: NSIndexPath) -> UITableViewCell {
        let identifier: String = "tableCell"

        var cell: TableCell! = tableView.dequeueReusableCellWithIdentifier(identifier) as? TableCell

        if cell == nil {

            cell = TableCell(style: UITableViewCellStyle.Value1, reuseIdentifier: identifier)

        }

        cell!.nameLabel!.text = example[indexPath.row].name

        return cell!

    }

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

然后将它链接到Main.storyboard上的DetailViewController(我创建)。每个myDictionary字符串的DetailView都显示在我的tableView中。一切正常。

但是我想让一些行显示MyDictionary的第二个值(链接)。 第1行显示我"名称"和"文字"来自MyDictionary,第2行显示来自" link"的文档或URL。它是不可能的或如何做这样的事情?

我很抱歉无知和英语不好。

1 个答案:

答案 0 :(得分:0)

两种方法:

<强> 1

删除从原型单元格到视图控制器的storyboard segue,只需实现UITableViewDelegate方法-(void) tableView: (UITableView*) tableView didSelectRowAtIndexPath: (NSIndexPath*) indexPath方法并在那里推送另一个视图控制器,如:

- (void) tableView: (UITableView*) tableView didSelectRowAtIndexPath: (NSIndexPath*) indexPath 
{
    // the identifier of the viewController in storyboard
    NSString* identifier = nil;
    // section 0
    switch (indexPath.section) {
        case 0: 
            // rows in section 0
            switch (indexPath.row) { 
                // row 0 in section 0
                case 0: identifier = @"IdentifierOfVCForFirstCellInFirstSection"; break;
                case 1: identifier = @"IdentifierOfVCForSecondCellInFirstSection"; break;
                default: break;
            } 
            break;
        default: break;
    }
    // 
    if (identifier != nil) {
        // perform Segue programmatically 
        [self.navigationController pushViewController: [[self storyboard] instantiateViewControllerWithIdentifier: identifier] animated: YES];
    }
    else {
        NSAssert(NO, @"No storyboard identifier implemented for row %@ in section %@", @(indexPath.row), @(indexPath.section));
    }
}

OR 2。

将另一个原型单元添加(拖放)到IB中的tableView中。在Attributes Inspector中为它指定一个不同的重用标识符。 然后将其与您想要的不同viewController连接(右键单击并在'Triggered Segues'下拖动selection到您想要的视图控制器。

然后,在cellForRowAtIndexPath方法中,根据您的indexPath决定哪种UITableViewCell你的魔杖出队。

对于第二个解决方案,我建议使用自定义UITableView子类/ Xib作为原型单元格。