我是IOS开发的新手,正在使用swift 3.0。我有2个具有相同布局的自定义TableView。唯一的区别是数据通过Json URL返回。一个TableView称为 HomePageC ,另一个 UserProfileC 。如何使用Prototype HomePageC中的内容并在UserProfileC中重用它?这就像有一个数据主页,然后看到单个用户数据,因此看到了UserProfile,但布局相同,因为我认为做2个相同的TableViews是多余的。

这是 HomePageC 代码

    func tableView(_ tableView: UITableView, cellForRowAt indexPath: IndexPath) -> UITableViewCell {
        let cell = tableView.dequeueReusableCell(withIdentifier: "HomePageTVC", for: indexPath) as! HomePageTVC


   cell.post.text = Posts[indexPath.row]
   cell.fullname.setTitle(FullName[indexPath.row],for: UIControlState.normal)
   cell.fullname.tag = indexPath.row
   cell.fullname.addTarget(self, action: #selector(HomePageC.Fullname_Click(sender:)), for: .touchUpInside)
   cell.comments.setTitle(Comments[indexPath.row],for: UIControlState.normal)
   cell.comments.tag = indexPath.row
   cell.votes.setTitle(Votes[indexPath.row],for: UIControlState.normal)
   cell.votes.tag = indexPath.row
   cell.time.text = Times[indexPath.row]
  cell.shares.setTitle(Shares[indexPath.row],for: UIControlState.normal)
   cell.shares.tag = indexPath.row
  cell.location.text = Locations[indexPath.row]


        return cell
    }

UserProfileC 代码
func tableView(_ tableView: UITableView, cellForRowAt indexPath: IndexPath) -> UITableViewCell {
        let cell = tableView.dequeueReusableCell(withIdentifier: "UserProfileTVC", for: indexPath) as! HomePageTVC


        cell.post.text = Posts[indexPath.row]
        cell.fullname.setTitle(FullName[indexPath.row],for: UIControlState.normal)
        cell.fullname.tag = indexPath.row
        cell.fullname.addTarget(self, action: #selector(HomePageC.Fullname_Click(sender:)), for: .touchUpInside)
        cell.comments.setTitle(Comments[indexPath.row],for: UIControlState.normal)
        cell.comments.tag = indexPath.row
        cell.votes.setTitle(Votes[indexPath.row],for: UIControlState.normal)
        cell.votes.tag = indexPath.row
        cell.time.text = Times[indexPath.row]
        cell.shares.setTitle(Shares[indexPath.row],for: UIControlState.normal)
        cell.shares.tag = indexPath.row
        cell.location.text = Locations[indexPath.row]
        cell.vote_status.text = Votes[indexPath.row]


        return cell
    }

我试图将其强制转换为HomePage,但它给出了一个错误,因为我已经迷路了,所以任何帮助都会很大。

ios - iOS Swift TableView有一种方法可以重用它们-LMLPHP

最佳答案

具有可重用表的一种可能方法是在Storyboard中创建一个单独的UITableViewController,并在那里设计原型单元。现在,您不再需要两个不同的重用标识符“HomePageTVC”和“UserProfileTVC”,而只需一个(只需保留“UserProfileTVC”即可)。不要忘记将表视图控制器的dataSourcedelegate设置为其自身。

下一步:将容器视图添加到要在其中重用此表的任何视图控制器(您的情况下均为HomePageC和UserProfileC控制器)。

ios - iOS Swift TableView有一种方法可以重用它们-LMLPHP

现在,只需将Control + Drag光标从创建的容器视图拖动到Storyboard中的可重用表视图控制器,即可建立容器关系。

现在,您有了一个UITableViewController类,即可将所有单元格管理逻辑放入其中,并且可以基于当前parentViewController属性轻松加载不同的数据-只需检查表当前嵌入的控制器类型即可:

if parentViewController is HomePageC {
    // Load user data for Home page controller
} else if parentViewController is UserProfileC {
    // Load user data for user profile controller
}

关于ios - iOS Swift TableView有一种方法可以重用它们,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/43105015/

10-12 14:35