Как сделать так, чтобы в первом ряду было определенное имя и изображение? - PullRequest
2 голосов
/ 31 мая 2019

У меня есть приложение, которое заполняет uitableview некоторыми свойствами, полученными от вызова API. Итак, мой вопрос: как я могу сделать так, чтобы сначала cell, например, имело имя «Назад» и какое-то изображение, а после этого заполняло другие cells свойствами, полученными от вызова API? Если кто-то может опубликовать какой-то пример, это было бы здорово.

Ответы [ 3 ]

1 голос
/ 31 мая 2019

Вы можете попробовать это

 override func tableView(_ tableView: UITableView, cellForRowAt indexPath: IndexPath) -> UITableViewCell {
        let cell = UITableViewCell(style: .default, reuseIdentifier: "CellId")
   switch indexPath.row {
    case 0:
        cell.textLabel!.text = "back"
        cell.imageView?.image = UIImage(named: "back.png")
        break
    default:
        cell.textLabel!.text =  array[indexPath.row - 1]
        break
    }
   retun cell
 }

override func tableView(_ tableView: UITableView, numberOfRowsInSection section: Int) -> Int {
    return arrayCount + 1
}

Другое решение с использованием заголовка TableView:

override func tableView(_ tableView: UITableView, cellForRowAt indexPath: IndexPath) -> UITableViewCell {
        let cell = UITableViewCell(style: .default, reuseIdentifier: "CellId")
        cell.textLabel!.text =  array[indexPath.row]
        retun cell
 }

override func tableView(_ tableView: UITableView, numberOfRowsInSection section: Int) -> Int {
    return arrayCount
}


    override func tableView(_ tableView: UITableView, viewForHeaderInSection section: Int) -> UIView? {
      let  btn = UIButton(frame: CGRect(x: 10, y: 10, width: 60, height: 30))
      btn.setTitle("Back", for: .normal)
      btn.setImage(UIImage(named: "BarCodeIcon.png"), for: .normal)
      btn.setTitle("Scan the Barcode", for: .normal)
      btn.titleEdgeInsets = UIEdgeInsets(top: 0.0, left: 42.0, bottom: 0.0, right: 0.0)
      btn.contentHorizontalAlignment = .left
      btn.addTarget(self, action: "btnTapped:", for: .touchUpInside)
    }

   @objc func btnTapped(sender: UIButton) {
   }
0 голосов
/ 03 июня 2019

Прежде всего разделите табличное представление на 2 секции.

Секция 0: здесь необходимо установить свою пользовательскую требуемую ячейку.

Секция 1: здесь нужно зарезервировать свою пользовательскую ячейку с данными из API.

Пример кода:

 extension ProjectDetailViewController: UITableViewDataSource {

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

    func tableView(_ tableView: UITableView, numberOfRowsInSection section: Int) -> Int {
        switch section {
        case 0:
            //deque your cell you want to place before data from API
        case 1:
            //deque data from api here
        case default:
            break
        }
    }

Примечание. Не забудьте перезагрузить табличное представление после получения данных из API

0 голосов
/ 31 мая 2019

Может быть, вам нужна не первая ячейка, которую можно прокручивать вместе с другими ячейками, а заголовок, который остается на своем месте, пока прокручиваются другие ячейки.Если это так, вы можете использовать:

override func tableView(_ tableView: UITableView, titleForHeaderInSection section: Int) -> String? {
    return "Section \(section)"
}  

Это создает простой текстовый заголовок.

Если вы хотите использовать настраиваемый заголовок, вам нужно было определить представление заголовка:

override func tableView(tableView: UITableView, viewForHeaderInSection section: Int) -> UIView? {
    let view = UIView() // Here you had to use a view that you set up earlier
    return view
}  

Эти заголовки могут быть созданы для каждого раздела вашей таблицы.

РЕДАКТИРОВАТЬ:

Я реализовал простой проект tableView и добавил код, предоставленный Симке в его / ее комментариях.

import Foundation
import UIKit

class TableViewController: UITableViewController {

    override func viewDidLoad() {
        super.viewDidLoad()
    }

    override func tableView(_ tableView: UITableView, numberOfRowsInSection section: Int) -> Int {
        return 3
    }

    override func tableView(_ tableView: UITableView, cellForRowAt indexPath: IndexPath) -> UITableViewCell {
        let cell = tableView.dequeueReusableCell(withIdentifier: "Cell")!
        cell.textLabel?.text = "Title"
        return cell
    }

    override func tableView(_ tableView: UITableView, viewForHeaderInSection section: Int) -> UIView?  { 
        let vw = UIView() 
        vw.frame.size.height = 40 
        let btnBk = UIButton(frame: CGRect(x: 0, y: 0, width: view.frame.width, height: vw.frame.height)) 
        btnBk.backgroundColor = .blue 
        btnBk.setTitle("back", for: .normal) 
        btnBk.addTarget(self, action: #selector(btnAct), for: .touchUpInside) 
        vw.addSubview(btnBk) 
        return vw 
    } 

    @objc func btnAct(sender: UIButton!){ 
        print("a") 
    } 
}

Здесь кнопка в представлении заголовка работает, т. Е. В журналах печатается «a».

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