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?

放大二维 UICollectionView

Fusuma相册查看视频拇指交换

集合视图单元格宽度不正确

从 iOS 文件系统中的 UIImagePickerController 保存和删除图像

如何使用 MVVM 和 RxSwift 编辑/删除 UICollectionView 单元格