UITableView 和 UICollectionView ?需要帮助
Posted
技术标签:
【中文标题】UITableView 和 UICollectionView ?需要帮助【英文标题】:UITableView & UICollectionView ? Help needed 【发布时间】:2019-02-10 10:43:44 【问题描述】:全部。我想不通这个。 我正在开发一个应用程序,该应用程序需要将此视图作为 TableView(表示练习,以练习名称作为标题)并在每个单元格内我需要查看并能够触摸这些圆形按钮(将集合表示为按钮数和代表按钮内的数字)。 我已经能够将图像和那些放在 CollectionView 中,但没有按钮的线索。这是我画的草图。
https://i.imgur.com/ZjHDM4d.png
我的tableViewController
import Foundation
import UIKit
class WorkoutViewController: UITableViewController
override func viewDidLoad()
super.viewDidLoad()
view.backgroundColor = #colorLiteral(red: 0.2156862745, green: 0.368627451, blue: 0.5921568627, alpha: 1)
var workouts: [Workout1] = Workout1.fetchWorkout1()
override func numberOfSections(in tableView: UITableView) -> Int
return workouts.count
override func tableView(_ tableView: UITableView, titleForHeaderInSection section: Int) -> String?
return "ExcerciseName"
override func tableView(_ tableView: UITableView, numberOfRowsInSection section: Int) -> Int
return workouts.count
override func tableView(_ tableView: UITableView, cellForRowAt indexPath: IndexPath) -> UITableViewCell
let cell = tableView.dequeueReusableCell(withIdentifier: "workoutCell", for: indexPath)
let workout = workouts[indexPath.row]
cell.textLabel?.text = workout.excerciseName
cell.textLabel?.textColor = UIColor.white
return cell
override func tableView(_ tableView: UITableView, didSelectRowAt indexPath: IndexPath)
let workout = workouts[indexPath.row]
tableView.deselectRow(at: indexPath, animated: true)
print("Do \(workout.sets) sets of \(workout.reps) reps of \(workout.excerciseName)")
override func tableView(_ tableView: UITableView, willDisplay cell: UITableViewCell, forRowAt indexPath: IndexPath)
cell.backgroundColor = UIColor.clear
数据来源
struct Workout1
let excerciseName: String
let sets: Int
let reps: Int
static func fetchWorkout1() -> [Workout1]
let w1 = Workout1(excerciseName: "Bench Press", sets: 3, reps: 8)
let w2 = Workout1(excerciseName: "Push Press", sets: 3, reps: 8)
let w3 = Workout1(excerciseName: "Squat", sets: 3, reps: 8)
let w4 = Workout1(excerciseName: "Deadlift", sets: 3, reps: 8)
let w5 = Workout1(excerciseName: "Bicep Curl", sets: 3, reps: 8)
let w6 = Workout1(excerciseName: "Tricep Pushdown", sets: 3, reps: 8)
return [w1,w2,w3,w4,w5,w6]
【问题讨论】:
您应该添加您尝试过的代码,以便我们提供帮助。无法发布整个解决方案。 【参考方案1】:理论上,根据您的图像,如果每一行中的圆圈不需要在滚动视图中(没有空间来显示所有圆圈),那么使用UIStackView
将是一个不错的选择,因为堆栈视图处理圆圈的间距和分布。
另一方面,如果视图容器必须是可滚动的,则使用集合视图可能会满足您的需求。
ios 8 Swift - TableView with embedded CollectionView.
Multiple Collection View in UITableView.
【讨论】:
我想从组数中添加按钮,从重复次数中添加按钮标签。而且不可滚动。 @MauroGarcia 所以答案没有解决你的问题......? 不是真的,我已经尝试添加图像和那个。但我需要添加按钮! @MauroGarcia 无论您打算添加什么作为组件(按钮或图像),它都与 布局有关。 那么如何在 UIStackView 中自动添加圆圈或按钮?我真的迷路了,对不起。我学习了很多教程、文档和其他东西,但都没有运气。【参考方案2】:您需要使用 UIButton,它允许您为每种状态(正常、选择、突出显示、禁用)设置图像和标题。你可以很容易地用它来做你的圆形按钮。
这里有一个关于如何做到这一点的教程: UIButton tutorial
和苹果参考: UIButton Apple doc
请注意,您不需要图像来绘制圆形按钮,对于一个简单的按钮,您可以为按钮添加边框并将其图层的cornerRadius 属性设置为圆形。
对于您的布局,您可以使用 UICollectionView 通过正确设置标题(补充视图)和单元格的大小来实现。
【讨论】:
这个想法是自动添加按钮(好像是“3”那么它添加了3个按钮)。 是的,只需将一个 UIButton 放在自定义 UICollectionViewCell 中(在 InterfaceBuilder 中或通过代码)并配置集合视图以显示您需要多少单元格【参考方案3】:解决了!使用了 CollectionView 并添加了一些按钮。 我用 TableView 和 TableViewCell 创建了一个新的 ViewController,然后用 CollectionViewCell 创建了一个 CollectionView。在里面我添加了我想要的。我为要使用的文本和图像创建了数组。关于设置每个单元格和每个 tableview(tableView 和 collectionView)的常用内容。为了知道用户点击了哪个项目,我使用了函数 didSelectItemAt 以及我使用了 segue 的操作(因为我想将用户发送到另一个视图)。
【讨论】:
答案需要具体。你能补充更多细节吗? 这就是我没有投反对票的原因。但是删除上面的评论,并编辑您的答案以包含它以上是关于UITableView 和 UICollectionView ?需要帮助的主要内容,如果未能解决你的问题,请参考以下文章
如何以编程方式使 UICollectionView 填充 UITableViewCell?