2016-10-16 2 views
0

Я занимаюсь разработкой приложения, и я хочу, чтобы сделать его похожим на странице настроек на прошивке:Как обновить UITableViewCell с подробной информацией?

enter image description here

поведение я хочу повторить это один нашли в клетках «From/To» и «Разрешить вызовы». Если вы заметили, эти ячейки отображают данные, которые пользователь вставил. Как я могу воспроизвести это?

Прежде всего, я довольно новичок в iOS, поэтому все, что я придумал, может быть не лучшим решением для моего дела.

Это то, что я думал о выполнении (добавление метки вправо и установив его значение):

enter image description here

Это лучший подход? Также, как установить это значение? Как мне пройти после того, как пользователь вернется из подробного представления, чтобы обновить эту ячейку?

+0

Насколько вы знаете о 'UITablevIews', повторном использовании UITableViewCells и сохранении данных в iOS? – Adeel

+0

@ Хорошо, я знаю о повторном использовании ячеек (я использую эту технику). Что касается сохранения данных, я использую SQLite. Но в этом случае я беспокоюсь только о сохраняющихся данных между представлениями и о том, что у меня есть нулевые знания, поэтому мой второй вопрос «Как мне пройти после того, как пользователь вернется из подробного представления, чтобы обновить эту ячейку?» Спасибо! – eestein

+0

Существует два способа обновления ячейки, когда пользователь возвращается из подробного представления. 1) «Протоколы» 2) «Уведомления». Я бы предположил, что вы идете с первым вариантом. На каком языке вы используете BTW? – Adeel

ответ

1

Вы в основном хотите обновить контент в предыдущем представлении (мы его называем FirstViewController), когда какое-то значение изменяется в подробном представлении. Один из возможных способов сделать это - Protocols and Delegates. Предполагая, что вы уже знаете о storyboards и segues, вот пример. Этот пример просто изменяет текст UILabel в FirstViewController, когда кнопка нажата в DetailViewController.

Давайте начнем с DetailViewController. Вы хотите наблюдать изменения в этой сцене и соответственно обновлять данные на другой сцене. Поэтому вам необходимо определить protocol в этом классе.

protocol DetailDelegate { 
    func updateCellWith(_ data:String) 
} 

Полное определение этого класса будет выглядеть следующим образом:

import UIKit 

protocol DetailDelegate { 
    func updateCellWith(_ data:String) 
} 

class DetailViewController: UIViewController { 

var delegate: DetailDelegate? 

override func viewDidLoad() { 
    super.viewDidLoad() 
    // Do any additional setup after loading the view. 
} 

//On button tap the cell content will change in the previous scene through the delegate method 
@IBAction func didTapBtn(_ sender: AnyObject) { 
    delegate?.updateCellWith("Cell updated") 
} 
} 

FirstViewController будет delegate в DetailViewController и будет соответствовать DetailDelegate. Вы установите FromViewController в качестве делегата DetailViewController перед переходом.

class FirstViewController: UIViewController, DetailDelegate { 

@IBOutlet weak var tableView: UITableView! 

override func viewDidLoad() { 
    super.viewDidLoad() 
    // Do any additional setup after loading the view, typically from a nib. 
} 

// Mark Navigation 

@IBAction func moveToDetailVC(_ sender: AnyObject) { 
    performSegue(withIdentifier: "detail", sender: indexPath) 
} 

override func prepare(for segue: UIStoryboardSegue, sender: Any?) { 
    let vc = segue.destination as! DetailViewController 
    vc.delegate = self 
} 
} 

На кнопке коснитесь DetailViewController будет передавать строку Cell updated в FirstViewController через метод делегата updateCellWith:.

+0

Спасибо! :) – eestein

+0

Мое удовольствие. – Adeel

Смежные вопросы