UITableView和UICollectionView?需要帮助

时间:2019-02-10 10:43:44

标签: ios swift uitableview uicollectionview

全部。我不知道这个。 我正在开发一个应用程序,该应用程序需要将此视图作为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]
}


}

3 个答案:

答案 0 :(得分:0)

理论上,根据您的图像,如果每行中的圆圈不需要处于滚动视图中(没有空间可以显示所有圆圈),那么使用UIStackView是一个不错的选择,因为堆栈视图可以处理圆的间距和分布。

另一方面,如果视图容器必须可滚动,则使用集合视图可能会满足您的需求。

答案 1 :(得分:0)

您需要使用UIButton,该按钮可让您设置每种状态(正常,选择,突出显示,禁用)的图像和标题。您可以很容易地使用圆形按钮。

此处提供了有关操作方法的教程: UIButton tutorial

和苹果参考: UIButton Apple doc

请注意,您不需要图像来绘制圆形按钮,对于简单的按钮,您可以在按钮上添加边框,并将其图层的cornerRadius属性设置为圆形。

对于布局,您可以通过正确设置标题(补充视图)和单元格的大小来使用UICollectionView来实现。

答案 2 :(得分:0)

解决了!使用了CollectionView并添加了一些按钮。 我使用TableView和TableViewCell创建了一个新的ViewController,然后使用CollectionViewCell创建了一个CollectionView。在其中添加了我想要的内容。我为文本创建了数组,并为要使用的图像创建了数组。关于设置每个单元格和每个tableview(tableView和collectionView)的常用知识。为了知道用户点击哪个项目,我使用了didSelectItemAt函数,对于动作我使用了segue(因为我想将用户发送到另一个视图)。