Как получить все значения UITextField в UITableView? - PullRequest
0 голосов
/ 09 апреля 2019

Я работаю с Core Data.У меня есть объект Core Data с именем Users .Я перечисляю пользователей в UITableView.Multi-выбор включен для UITableView.Подкласс UITableViewCell включает UILable для имя пользователя и UITextField для цена .Кроме того, у меня есть объект Core Data с именем Расходы .

Я пытаюсь сделать следующее: я введу цены для пользователей и сохраню в Расходы с информацией о пользователе и цене.Например:

  1. У меня есть 10 пользователей, перечисленных в UITableView.( DONE )

  2. Все ячейки имеют UITextField для цены.( DONE )

  3. Я ввожу цены в UITextField для 5 выбранных мной пользователей.( DONE )

  4. Получите информацию, которая включает userUID и цену из выбранных ячеек.( FAIL )

  5. Сохранить userUID и цена до Расходы с doneButton.

Вот как выглядят мои сущности базовых данных:

Пользователи:

@NSManaged public var userName: String
@NSManaged public var userUID: String

Расходы:

@NSManaged public var userUID: String
@NSManaged public var price: Int

class viewController : UIViewController, UITableViewDelegate,UITableViewDataSource {

 @IBOutlet weak var tableView: UITableView!

 var fetchedResultsController : 
    NSFetchedResultsController<Users>!


  override func viewDidLoad() {
        super.viewDidLoad()
        tableView.allowsMultipleSelection = true 
  }


  override func viewWillAppear(_ animated: Bool) {

        fetchUsers() 

  }

  func fetchUsers() {
     ...... // FETCHING USERS FROM COREDATA
     tableView.reloadData()
  }

  @IBAction func doneButton(_ sender: UIBarButtonItem) {
     // ????????????
  }


 func numberOfSections(in tableView: UITableView) -> Int {
        guard let fetchRes  =  fetchedResultsController , let sections 
    = fetchRes.sections else {
            return 0
        }
        return sections.count
    }

 func tableView(_ tableView: UITableView, numberOfRowsInSection 
 section: Int) -> Int {

        guard let fetchRes  =  fetchedResultsController , let 
 sectionInfo = fetchRes.sections?[section] else {
            return 0
        }
        return sectionInfo.numberOfObjects
    }

 func tableView(_ tableView: UITableView, cellForRowAt indexPath: 
 IndexPath) -> UITableViewCell { 

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

        let User = fetchedResultsController.object(at: indexPath)

        cell.lblUserName.text = User.userName

    return cell
 }

}


class CustomCell : UITableViewCell {


    @IBOutlet weak var lblUserName: UILabel!
    @IBOutlet weak var txtPrice: UITextField!


}

Я хочу получить userUID и цену от UITextField из выбранных ячеек.

Ответы [ 2 ]

1 голос
/ 09 апреля 2019

Дело в том, что вы не должны использовать UITableViewCell в качестве хранилища данных, потому что TableView может освободить их из памяти, если их нет на экране.

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

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

0 голосов
/ 09 апреля 2019

С моей точки зрения, вам нужно что-то вроде еще одного слоя для данных ячейки

class CellViewModel {
    let user: User
    var price: Int/Double/String
}

После получения ваших пользователей вы создаете список CellViewModel и сохраняете его. И ваш CustomCell работает с ним (устанавливает имя и т. Д.).

Ячейка должна быть UITextFieldDelefate и изменить price на CellViewModel.

После того, как вы сделали все свои изменения, вы берете список выбранных ячеек из indexPathsForSelectedRows. Теперь у вас есть индексы выбранных ячеек и список ваших CellViewModel. Теперь вы перебираете их и создаете Expenses

Проверьте map и filter методы списка, чтобы сделать ваше решение более читабельным.

Удачи

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