swift - создать страницу для повторных данных и без данных - PullRequest
0 голосов
/ 04 сентября 2018

Мне нужен совет по схеме ViewContoller. Я должен создать представление с платежными адресами. Там не может быть никакого адреса вообще, или некоторые адреса. Если там никого нет, там должна быть только кнопка «Добавить новый». И если есть адреса, у каждого должны быть кнопки «Редактировать», «Удалить» и «Добавить новый».

У меня есть данные для этого VC как JSON, проанализированные и сохраненные в plist.

Так что логика, чтобы этот вид выглядел по-другому, зависит от 1), есть адреса или нет? и 2) если есть 1, или 2, или, может быть, 20 платежных адресов?

Большое спасибо!

1 Ответ

0 голосов
/ 04 сентября 2018

Я решил такие проблемы с помощью UITableVIew и UITableViewDataSource и UITableViewDelegate:

  1. настройка вида таблицы для одного раздела (адреса)

     func numberOfSections(in tableView: UITableView) -> Int {return 1;}
    
  2. возвращает длину адресных массивов в методе делегата

    func tableView(_ tableView: UITableView, viewForFooterInSection section: Int) -> UIView? {
      return adresses.count
     }
    
  3. установить вид нижнего колонтитула, если длина массива равна 0

       func tableView(_ tableView: UITableView, viewForFooterInSection section: Int) -> UIView? {
        if adresses.count == 0  {
            let vw = YourViewClass()
            //I use blockskit library here (vw.bk_) to recognize a tap, but you can add a button by yourself
            vw.bk_(whenTapped: {
               //Create and present your next viewcontroller to 
            })
            return vw
        }
        return nil
        }
    
  4. установить высоту нижних колонтитулов на 0, если есть адреса

    func tableView(_ tableView: UITableView, heightForFooterInSection section: Int) -> CGFloat {
    
        if addresses.count > 0 {
            return YOUR_DESIRED_FOOTER_HEIGHT_FOR_INPUT
        }
        return 0
    }
    
  5. создать строку для каждого адреса

    func tableView(_ tableView: UITableView, cellForRowAt indexPath: IndexPath) -> UITableViewCell { 
       let address = addresses[indexPath.row]
       let tableViewCell = UITableViewCell() //maybe you have to create your own if the layout does not fit
       //set tableViewCell's title / description to show address values
       return tableViewCell
    }
    

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

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...