2015-07-07 6 views
0

У меня есть UITableView с ячейками, которые содержат 3 textField s.Добавить значения UITableView Cell TextField в массив? (Swift)

Каждая ячейка идентична и собирает от пользователя те же входные данные: «событие», «дата» и «просмотр», используя 3 textField s в каждой ячейке.

После того, как пользователь сделал выбор, сколько записей они хотели бы сделать, и клетка размножается эти поля формы, я хотел бы принимать значение каждой ячейки и поместить их в массивы имени: var events = []var dates = [] и var reviews = []. Или, альтернативно, в массив массивов с событием, датой и обзором в виде одного массива.

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

Я безуспешно искал Google ... (Gulp) Помощь!

UPDATE

Вот еще некоторая информация, чтобы помочь вам знать, что я имею в виду. Пользователь говорит, что они хотят сделать 3 записи в своем журнале.UITableView затем заполняет с 3-клетками, которые являются идентичными:

UITABLE КЛЕТКИ 1

  • СЛУЧАЙ [пустое текстовое поле]

  • ДАТА [пустое текстовое поле]

  • ОБЗОР [ пустой вид Текста]

UITABLE ЯЧЕЙКА 2

  • СЛУЧАЙ [пустое текстовое поле]

  • ДАТА [пустое текстовое поле]

  • ОБЗОР [пустой вид Текста]

UITABLE КЛЕТКИ 3

  • СЛУЧАЙ [пустое текстовое поле]

  • ДАТА [пустое текстовое поле]

  • ОБЗОР [пустой вид текста]

Затем эти данные превращаются в многомерных данных JSON и разобран PHP (эта часть уже сделано и работает с данными заглушек). Моя цель состоит в том, что данные в конце концов, чтобы выглядеть в Swift:

var userData = [ 
[ 
    "event": "user event 1", 
    "date": "user date 1", 
    "review": "user review 1" 
], 
[ 
    "event": "user event 2", 
    "date": "user date 2", 
    "review": "user review 2" 
], 
[ 
    "event": "user event 3", 
    "date": "user date 3", 
    "review": "user review 3" 
] ] 

ответ

0
  1. Вы должны получить все видимые ячейки indexpath с помощью этого:

    NSArray *paths = [self.tableView indexPathsForVisibleRows]; 
    
  2. Затем получить все клетки в некотором массиве:

    NSMutableSet * visibleCells = [[NSMutableSet alloc] init];

    for (NSIndexPath *path in paths) { 
        [visibleCells addObject:[tableView cellForRowAtIndexPath:path]]; 
    } 
    
  3. Тогда вы можете получить значения TextField из каждой ячейки:

    для (UITableViewCell * thisCell в visibleCells) {// печать TextField NSLog (@ "% @ \ п", thisCell.textField ,текст); }

Надеюсь, это поможет.

+0

благодарит за советом. Вы случайно не знаете версию Swift? Насколько я бы хотел, я был более подробным в Obj-C, я всего лишь Swift guy :) – simplexity

0

Стратегия, о которой вы думаете, называется parallel arrays. Хотя это сработает, будет немного сложнее поддерживать и более подвержен ошибкам - IMO, по крайней мере. Что-то объектно-ориентированное подойдет вашим потребностям намного лучше. Итак, что бы я сделал, это создать объект модели и создать и массив этих объектов для хранения данных.

struct MyModel { 
    let event: String 
    let review: String 
    let date: NSDate 
} 

Тогда, предполагая, что у вас есть элемент, который выглядит примерно так:

class MyTableCell: UITableViewCell { 

    @IBOutlet weak var eventLabel: UILabel! 
    @IBOutlet weak var dateLabel: UILabel! 
    @IBOutlet weak var reviewTextView: UITextView! 
} 

Структура данных как массив этих моделей в контроллере табличного. Когда придет время заполнить ваши ячейки, используйте параметр indexPath в вашем методе tableView(_:cellForRowAtIndexPath:), чтобы выбрать модель из массива моделей.

class MyTableViewController: UITableViewController { 

    var models = [MyModel]() 

    lazy var dateFormatter = NSDateFormatter() 

    override func tableView(tableView: UITableView, cellForRowAtIndexPath indexPath: NSIndexPath) -> UITableViewCell { 
     if let cell = tableView.dequeueReusableCellWithIdentifier("myIdentifier") as? MyTableCell { 
      let model = self.models[ indexPath.row ] 

      cell.eventLabel.text = model.event 
      cell.dateLabel.text = self.dateFormatter.stringFromDate(model.date) 
      cell.reviewTextView.text = model.review 

      return cell 
     } 
     fatalError("Could not create cell") 
    } 

    override func tableView(tableView: UITableView, numberOfRowsInSection section: Int) -> Int { 
     return self.models.count 
    } 
} 
+0

спасибо за совет! Хотя кажется, что этот ответ подходит для получения ранее существующих данных и построения табличных ячеек. Мой вопрос состоял в том, чтобы пустые текстовые поля для пользователя заполнили, а затем извлекли те значения, которые нужно добавить в массив. Не могли бы вы дать некоторые рекомендации? Очень признателен! – simplexity

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