Создать табличное представление как календарь iOS - PullRequest
0 голосов
/ 12 декабря 2018

Я пытаюсь создать календарь, как в Google или iOS.Для календаря я использую потрясающий FSCalendar.Работает отлично.Но у меня проблема с просмотром таблицы для дневных событий.Я создал uitableview с временной шкалой (1 ячейка = 30 минут).Но как добавить сюда события, похожие на календарь Google или iOS, например, enter image description here

Я думаю, мне нужно добавить кнопки для каждого события и добавить его в uitableview.Это мой код:

func numberOfSections(in tableView: UITableView) -> Int {
    return 1
}

func tableView(_ tableView: UITableView, numberOfRowsInSection section: Int) -> Int {
    return (hour_end - hours_begin) * step
}

func tableView(_ tableView: UITableView, cellForRowAt indexPath: IndexPath) -> UITableViewCell {
    let cell = tableView.dequeueReusableCell(withIdentifier: "TableViewCell", for: indexPath) as! TableViewCell
    cell.timeLabel.layer.zPosition = 1
    cell.timeLabel.isHidden = true

    if indexPath.row % step == 0 && indexPath.row != ((hour_end - hours_begin) * step) - 1 {
        let hour = indexPath.row / step + hours_begin
        cell.timeLabel.text = (hour < 10 ? "0": "") + String(hour) + ":00"
        cell.timeLabel.layer.zPosition = 10
        cell.timeLabel.isHidden = false
        cell.separatorInset = UIEdgeInsets(top: 0, left: 50, bottom: 0, right: 0)
    }
    else {
        cell.timeLabel.text = ""
        cell.timeLabel.isHidden = true
        cell.separatorInset = UIEdgeInsets(top: 0, left: 2000, bottom: 0, right: 0)
        cell.timeLabel.layer.zPosition = 1
    }

    add_event(indexPath: indexPath, nRef: 5, offset: 0, height: 64.0)

    return cell
}

func tableView(_ tableView: UITableView, didSelectRowAt indexPath: IndexPath) {
    print(indexPath.row)
}

func add_event(indexPath: IndexPath, nRef: Int, offset: CGFloat, height: CGFloat)
{
    let row = indexPath.row
    let rectOfCellInTableViewCoordinates = tableView.rectForRow(at: indexPath)
    let rectOfCellInSuperviewCoordinates = view.convert(rectOfCellInTableViewCoordinates, to: tableView.superview)
    print("\(row) \(rectOfCellInSuperviewCoordinates.origin.x) \(rectOfCellInSuperviewCoordinates.origin.y)")
    if row == nRef {
        if let z = view.viewWithTag(nRef) as! UIButton?{
            print("z found")
            z.removeFromSuperview()
        }

        let btn_x = 50
        let btn_width = tableView.frame.width - 50
        let frame = CGRect(x: CGFloat(btn_x), y: rectOfCellInSuperviewCoordinates.origin.y + offset, width: btn_width, height: height)
        let overlay_btn = UIButton(frame: frame)

        overlay_btn.backgroundColor = UIColor(red: 0.5, green: 0.0, blue: 0.5, alpha: 0.3)
        overlay_btn.setTitle("Press for more details", for: .normal)
        overlay_btn.setTitleColor(UIColor.black, for: .normal)
        overlay_btn.layer.cornerRadius = 8
        overlay_btn.tag = 5
        tableView.addSubview(overlay_btn)

    }
}

Но я думаю, что это не очень хорошее решение.Есть идеи?

1 Ответ

0 голосов
/ 12 декабря 2018

Я бы рекомендовал использовать вид прокрутки для того, что вы пытаетесь достичь.Вместо того, чтобы использовать ячейки и добавлять представления ... разделить их между ячейками будет сложно.Вместо этого вы можете иметь вид прокрутки, который имеет все разделители и часовые метки.

Реализация пользовательского UIView, который будет служить событием.Когда пользователь создает событие, оно будет подпредставлением вашего прокрутки.Скажем, например, ваш прокрутка имеет длину 2400 пикселей и каждый час - 100 пикселей. Если событие начинается в 12 часов, добавьте UIView к отметке 1200 пикселей ...

Это грубое объяснение того, как я бы подошел к этой проблеме.Не стесняйтесь обращаться, если у вас есть дополнительные вопросы.

...