Помогите с оформлением


#1

Вощем дело такое:

Есть у меня некие сооружения, площадь которых пользователь должен учитывать для расчета, показатели пользователь вносит сам, так как это переменные, так же юзер должен отметить по каким сооружениям вести расчет, а по каким нет, так же можно выбрать все сооружения. Всего сооружений 11. Вопрос, как грамотнее это реализовать? Сейчас я прикидываю с помощью label, text field и switch, но все не помещается на страницу=(

Вот так выглядит:


#2

можно сделать таблицу с наименованиями сооружений, по нажатию на строку выскакивает алерт с двумя полями и ОК. а на строчке отображается введенные данные или check


#3

поместить все на ScrollView как вариант


#4

В таком случае, пользователь не увидит введенные данные, после нажатия “ОК” или я не прав?


#5

По поводу scroll думал, но пока оставил это вариант, может что-то получше имеется?


#6

в строяке рядом с наименованием можно отображать по правой стороне, либо под наименованием


#7

Вот вам как пример.


#8

может лучше посмотреть подобные проекты и как их реализовали ?


#9

В общем всем спасибо за отзывчивость! Попробовал реализовать по примеру Ookey. Все вводы бы получилось, но не разобрался как сделать чтобы switch не выбирался на нескольких ячейках.=( Решил попробовать способ с alert controller, удалось, но есть не большая загвоздка.

у меня получается так:
Пользователь нажимает на ячейку сооружения, появляется alert с 2 textfield для ввода показаний, потом нажимает “ок” и показания переносятся в ячейку под наименование. После рядом появляется checkmatk. Вот тут то и появляются проблемы!

  1. галочка напротив ячейки появляется, но все сдвигается влево
  2. при cкроле показания переносятся в другую ячейку, а при cкроле обратно пропадают из только что внесенной

Я понимаю что я всех замучал, но помогите советом, после видео уроков это мой первый проект…
вот ссылка на проект

Заранее всем спасибо за помощь!


#10

тут я думаю внесенные данные вы просто добавляете в поля из ячейки, а нужно добавлять эти данные в массив откуда перерисовывается таблица.[quote=“skull-man, post:9, topic:2807”]

  1. галочка напротив ячейки появляется, но все сдвигается влево
    [/quote]
    а тут наверное нужно констрейны поправить

#11

Это кажется поправил

а вот тут не совсем понял, разве тут

override func tableView(_ tableView: UITableView, didSelectRowAt indexPath: IndexPath) {
let areaImputAlert = UIAlertController(title: “Площадь сооружения”, message: “Введите площадь”, preferredStyle: .alert)
areaImputAlert.addTextField { (area) in
area.placeholder = "Площадь"
area.keyboardType = UIKeyboardType.decimalPad
}

    areaImputAlert.addTextField { (areaShelter) in
        areaShelter.placeholder = "Площадь укрытия"
        areaShelter.keyboardType = UIKeyboardType.decimalPad
    }
    areaImputAlert.addAction(UIAlertAction(title: "OK", style: .default, handler: {[weak areaImputAlert] (_) in
        let cell = tableView.dequeueReusableCell(withIdentifier: "cell", for: indexPath) as! BuildingsTableViewCell
        let areaTextField = areaImputAlert?.textFields![0]
        let areaSheltertextField = areaImputAlert?.textFields![1]
        cell.areaLabel.text = areaTextField?.text
        cell.areaShelterLabel.text = areaSheltertextField?.text
        cell.accessoryType = .checkmark
        self.buildingEnable[indexPath.row] = true
        }))
    
    areaImputAlert.addAction(UIAlertAction(title: "Отмена", style: .default, handler: nil))
    
    self.present(areaImputAlert, animated: true, completion: nil)
}

я не заменяю текст в label текстом из алерта?


#12

при скроле ячейки в таблице перерисовываются и данные для ячеек обычно берутся из массива или базы, поэтому введенные пользователем данные надо где-то хранить (лучше рядом с наименованиями), чтобы потом их обрисовывать в cellForRowAt


#13

Правильно ли я понял? Вы советуете перенести Алерт и все остальное в cellForRow ?


#14

До меня дошло! Нужно данные помещать не напрямую в строку, а в массив! А потом в cellForRow cell назначить значение из массива, но тогда получается массив нужно очищать, перед вводом новых значений иначе он разрастется, а это значит что уже введенные данные тоже очистятся или я не прав?


#15

данные в массиве можно не отчищать, а заменять, например такая конструкция
[(title:“приемная 1”, s1:"", s2:""), (title:“приемная 2”, s1:"", s2:""), (title:“приемная 3”, s1:"", s2:""), (title:“приемная 4”, s1:"", s2:"")]…
и обращать к элементам через IndexPath