我是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但是它给出了一个错误,任何帮助都会很棒,因为我很丢失。
答案 0 :(得分:1)
拥有可重用表的一种可能方法是在Storyboard中创建一个单独的UITableViewController
并在那里设计原型单元。而不是具有两个不同的重用标识符 - " HomePageTVC"和" UserProfileTVC" - 你现在可以拥有一个(只需离开" UserProfileTVC")。不要忘记将表视图控制器的dataSource
和delegate
设置为自身。
下一步:将容器视图添加到要重复使用此表的任何视图控制器(在您的情况下都是HomePageC和UserProfileC控制器)。
现在只需将 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
}