У меня есть tableView на mainStoryboard с двумя пользовательскими ячейками.

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

У меня есть изображение и код, добавленный ниже.

enter image description here

enter image description here

   class HomeViewController: UIViewController, UITableViewDelegate, UITableViewDataSource, MFMailComposeViewControllerDelegate {

        @IBOutlet var tblStoryList: UITableView!

        var array = PLIST.shared.mainArray



        override func viewDidLoad() {
            super.viewDidLoad()


        //spacing between header and cell
            self.tblStoryList.contentInset = UIEdgeInsetsMake(-20, 0, 0, 0)

          //delete separator of UITableView
        tblStoryList.separatorStyle = .none

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

        func tableView(_ tableView: UITableView, numberOfRowsInSection section: Int) -> Int {
            return self.array.count + 1
        }



         func tableView(_ tableView: UITableView, cellForRowAt indexPath: IndexPath) -> UITableViewCell {
            if indexPath.row == 0 {
                let cell  = tableView.dequeueReusableCell(withIdentifier: "HeaderCell", for: indexPath) as! HeaderCell
                cell.headerTitle.text = "First Stage"
                return cell
            }

            let cell = tableView.dequeueReusableCell(withIdentifier: "StoryTableviewCell", for: indexPath) as! StoryTableviewCell


            //making plist file
            let dict = self.array[indexPath.row - 1]
            let title = dict["title"] as! String
            let imageName = dict["image"] as! String
            let temp = dict["phrases"] as! [String:Any]
            let arr = temp["array"] as! [[String:Any]]
            let detail = "progress \(arr.count)/\(arr.count)"

            //property to plist file
            cell.imgIcon.image = UIImage.init(named: imageName)
            cell.lblTitle.text = title
            cell.lblSubtitle.text = detail

            cell.selectionStyle = UITableViewCellSelectionStyle.none


            return cell
        }
0
risa8 27 Май 2017 в 19:48

2 ответа

Лучший ответ

Обновите свои условия для HeaderCell и используйте троичный оператор для установки headerTitle

if indexPath.row == 0 || indexPath.row == 3 || indexPath.row == 5 {
    let cell  = tableView.dequeueReusableCell(withIdentifier: "HeaderCell", for: indexPath) as! HeaderCell
    cell.headerTitle.text = indexPath.row == 0 ? "First Stage" : indexPath.row == 3 ? "Second Stage" : "Third Stage"
    return cell
}
1
Jože Ws 27 Май 2017 в 18:01

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

Основная идея . разделите вашу строку вместе с этапами, поместите данные ячейки в массив и добавьте их в словарь со значением раздела в качестве ключа. Для визуализации вашего случая словарь будет выглядеть следующим образом.

@{
     @"First Stage" : @[object_for_basic_grammar_1,
                        object_for_basic_grammar_2
                       ],
     @"Second Stage": @[object_for_basic_grammar3],
     ...
     ...
}

И еще один массив необходим для хранения порядка словарных ключей, который будет отображаться следующим образом

@[@"First Stage", @"Second Stage"
]

Теперь пошагово следуйте списку:

  1. Используйте numberOfSections (in :), чтобы указать количество этапов. возвращает счетчик массива, в котором хранятся разделы.
  2. Используйте tableView (_: numberOfRowsInSection :) для указания количества строк в этом разделе. получить объект строки раздела из массива списка разделов, объявленного позже, и выполнить поиск строк в словаре. Вы найдете здесь массив грамматик, верните счетчик этого массива.
  3. Используйте tableView (_: cellForRowAt :) для предоставления конкретной ячейки для этот ряд, как вы сделали для ячейки грамматики.
  4. Используйте tableView (_: heightForHeaderInSection :) для предоставления высоты для заголовок раздела.
  5. Теперь внедрите tableView (_: viewForHeaderInSection :) и верните представление для указав вид в разрезе, который в вашем случае это этапы.

Надеюсь, это поможет вам, удачи.

0
Ratul Sharker 27 Май 2017 в 17:11