DiIemma при выборе способа создания этой страницы - PullRequest
0 голосов
/ 13 июня 2018

Я новичок в Swift, у меня есть дилемма для создания страницы, показанной на скриншоте.У меня была первоначальная мысль создать всю эту страницу с UICollectionView с UITableView внутри одной из ячеек.Но метод кажется довольно сложным, и я не понимаю, как реализовать скользящий метод для переключения между страницей «Редактировать профиль» и «Фотографии».Кто-нибудь здесь может просветить меня?Спасибо

enter image description here

Ответы [ 3 ]

0 голосов
/ 13 июня 2018

Я использую следующие экраны: 1) Отдельный просмотр заголовка (аватар, имя, возраст, премиум значок).Вы помещаете это представление в свойство headerView UITableView.2) Вы реализуете разделитель (Edit Prof | Photos) как подпредставление заголовка.3) Базовая информация выглядит как SectionHeaderView в первом разделе UITableVIew. 4) После этого у вас остается простое табличное представление.

0 голосов
/ 13 июня 2018

Вы можете использовать containerView и управлять представлением как childViewController.

// The main viewController
class ViewController: UIViewController {

    @IBOutlet weak var containerView: UIView!

    public lazy var vc1: UITableViewController = {
        guard let vc = storyboard?.instantiateViewController(withIdentifier: "TableViewController") as? UITableViewController else { fatalError() }
        return vc
    }()

    public lazy var vc2: UICollectionViewController = {
        guard let vc = storyboard?.instantiateViewController(withIdentifier: "CollectionViewController") as? UICollectionViewController else { fatalError() }
        return vc
    }()

    override func viewDidLoad() {
        addVC(vc1)
    }

    // outlet is linked to a UISegmentedControl and trigged when the value is changed
    @IBAction func didSelectSegment(_ sender: UISegmentedControl) {
        let (vcToAdd, vcToRemove) = sender.selectedSegmentIndex == 0 ? (vc1, vc2) : (vc2, vc1)
        removeVC(vcToRemove)
        addVC(vcToAdd)
    }

    func addVC(_ vc: UIViewController) {
        addChildViewController(vc)
        containerView.addSubview(vc.view)
        vc.view.translatesAutoresizingMaskIntoConstraints = false
        vc.view.centerXAnchor.constraint(equalTo: containerView.centerXAnchor).isActive = true
        vc.view.centerYAnchor.constraint(equalTo: containerView.centerYAnchor).isActive = true
        vc.view.heightAnchor.constraint(equalTo: containerView.heightAnchor).isActive = true
        vc.view.widthAnchor.constraint(equalTo: containerView.widthAnchor).isActive = true

        // additional setup
    }

    func removeVC(_ vc: UIViewController) {
        vc.view.removeFromSuperview()
        vc.removeFromParentViewController()
    }
}

class TableViewController: UITableViewController {

    override func viewWillAppear(_ animated: Bool) {
        super.viewWillAppear(animated)
        tableView.reloadData()
    }

    // MARK: - Table view data source
    override func numberOfSections(in tableView: UITableView) -> Int {
        return 1
    }

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

    override func tableView(_ tableView: UITableView, cellForRowAt indexPath: IndexPath) -> UITableViewCell {
        let cell = tableView.dequeueReusableCell(withIdentifier: "tvCell") ?? UITableViewCell(style: .default, reuseIdentifier: "tvCell")
        cell.textLabel?.text = indexPath.row.description
        return cell
    }

}

class CollectionViewController: UICollectionViewController {

    override func viewWillAppear(_ animated: Bool) {
        super.viewWillAppear(animated)
        collectionView?.reloadData()
    }

    override func numberOfSections(in collectionView: UICollectionView) -> Int {
        return 1
    }


    override func collectionView(_ collectionView: UICollectionView, numberOfItemsInSection section: Int) -> Int {
        return 10
    }

    override func collectionView(_ collectionView: UICollectionView, cellForItemAt indexPath: IndexPath) -> UICollectionViewCell {
        guard let cell = collectionView.dequeueReusableCell(withReuseIdentifier: "cvCell", for: indexPath) as? CVCell else { fatalError() }
        cell.nameLabel.text = indexPath.row.description
        return cell
    }
}

class CVCell: UICollectionViewCell {
    @IBOutlet weak var nameLabel: UILabel!
}

UITableViewController UITableViewController

UICollectionViewController UICollectionViewController

0 голосов
/ 13 июня 2018

Я бы посоветовал вам использовать UITableViewController и иметь возможность просмотра таблицы внутри ячейки.для детали развернуть и сложить.

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