#ios
#iOS
Вопрос:
Я разрабатываю приложение и хочу, чтобы оно выглядело как страница настроек на iOS:
Поведение, которое я хочу воспроизвести, — это поведение, найденное в ячейках «От / до» и «Разрешить вызовы из». Если вы заметили, в этих ячейках отображаются данные, вставленные пользователем. Как я могу это повторить?
Прежде всего, я довольно новичок в iOS, поэтому все, что я придумал, может быть не лучшим решением для моего случая.
Это то, о чем я думал (добавление метки справа и установка ее значения):
Это лучший подход? Кроме того, как мне установить это значение? Как мне поступить после того, как пользователь вернулся из подробного представления, чтобы обновить эту ячейку?
Комментарии:
1. Что вы знаете о
UITablevIews
повторномUITableViewCells
использовании и сохранении данных в iOS?2. @Adeel ну, я знаю о повторном использовании ячеек (я использую эту технику). Что касается сохранения данных, я использую SQLite. Но в этом случае меня беспокоит только сохранение данных между представлениями, о которых я ничего не знаю, поэтому мой второй вопрос
How should I go by after the user returned from the detail view to update that cell?
Спасибо!3. Есть два способа обновить ячейку, когда пользователь возвращается из подробного представления. 1)
Protocols
2)Notifications
. Я бы посоветовал вам выбрать первый вариант. Кстати, какой язык вы используете?4. Всякий раз, когда значение изменяется в подробном представлении, вы можете уведомить предыдущее представление об этом изменении с помощью
protocol
метода илиnotification
.5. @Adeel спасибо 🙂 На самом деле я использую Xamarin.iOS, но вы можете привести мне пример в swift, и я смогу его перевести 🙂
Ответ №1:
По сути, вы хотите обновить содержимое в предыдущем представлении (мы называем его FirstViewController
), когда какое-либо значение изменяется в подробном представлении. Один из возможных способов сделать это — через Protocols and Delegates
. Предполагая, что вы уже знаете о storyboards
и segues
вот пример. Этот пример просто изменяет текст a UILabel
в FirstViewController
при нажатии кнопки в DetailViewController
.
Давайте начнем с DetailViewController
. Вы хотите наблюдать за изменениями в этой сцене и соответствующим образом обновлять данные в другой сцене. Итак, вам нужно определить протокол в этом классе.
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:
.
Комментарии:
1. С удовольствием 🙂.