2014-01-23 2 views
1

У меня есть UIViewController, который вызывает в качестве подзапроса 4 UITableViewControllers.Сохранение нескольких значений из UITableView

В этих таблицах включен флажок аксессуаров и может выбирать несколько строк в таблице.

Мой вопрос в том, когда мой UIViewController отображается со всем табличным представлением, я хочу сохранить выбранные значения каждого вида таблицы и сохранить его в массиве или что-то еще.

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

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

ответ

0

Просто используйте indexPathsForSelectedRows. Но эта инструкция вернет более одного indexPath.

Это говорит о том, что у Xcode есть блестящая функция автозаполнения, вы могли бы начать вводить «индекс», и он показал бы indexPathsForSelectedRows напрямую, вы также можете обратиться к отличной документации, прилагаемой к Xcode. Надеюсь, это поможет вам!

ОБНОВЛЕНИЕ 1 - Как захватить indexPaths из массива

метод indexPathsForSelectedRows возвращает массив объектов NSIndexPath, каждый из которых соответствует одному выбранному элементу. Если выбранных элементов нет, этот метод возвращает пустой массив.

Теперь, чтобы получить доступ к этому объекту, вы должны спросить себя, как мне получить доступ к массиву? Вы делаете некоторые исследования, и тогда вы пришли к такому выводу:

NSArray *arrayOfIndexPathsTableOne = [self.myTableViewOne indexPathsForSelectedRows]; 

//Then you can iterate through the array and doWhatever you like. 
for(int i = 0; i < [arrayOfIndexPathsTableOne count]; i++){ 
    NSIndexPath *indexPathImInterestedIn = [arrayOfIndexPathsTableOne objectAtIndex:i]; 
    //If you do actually have a tableViewController then call [self cellFor...]; instead of self.myTableViewOne 
    UITableViewCell *currentCell = [self.myTableViewOne cellForRowAtIndexPath:indexPathImInterestedIn]; 

    //you can grab the data you need from this cell and do whatever you like 
    //I would suggest you grab the data from the datasource instead of the cell, since your datasource should contain the datamodel where you can extract the information you need. 

    //Or if its just one value from the cell you want to grab you could do 
    [myGlobalArray addObject:[NSString stringWithObject:@"%@", currentCell.textLabel.text]]; //your value 
} 

//Voila 
+0

OP имеет контроллер вида, который содержит несколько контроллеров Table View **, а не таблицы. Таким образом, ваш код self.myTableViewOne не будет работать. (И манипулирование другими иерархиями представлений диспетчера представлений прерывает инкапсуляцию другого VC.) Поэтому я предложил создать протокол для обмена данными между контроллерами представлений. –

+0

Я сомневаюсь, что он имеет 4 'UITableViewControllers' в своем' UIViewController' и вместо этого имеет 'UITableViews', что он создан. Я помню в свое время, когда я использовал UITableViews UITableViewControllers. Но это не проблема, OP может просто сделать «self», а затем метод, который он хочет вызвать. Спасибо что подметил это. – Pavan

0

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

Затем, в prepareForSegue, вы можете сохранять указатели на каждый из ваших дочерних контроллеров представления таблиц.

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

У меня есть пример проекта на github, у которого есть родительский контроллер представления, на котором есть 2 контроллера табличного представления, где как родительский, так и дочерний контроллеры представления используют протоколы для связи друг с другом. Проверьте это, нажав на эту ссылку

Demo project using embed segues to manage multiple static table views

Заметим, что для одного вида таблицы, метод indexPathsForSelectedRows будет возвращать массив всех выбранных элементов в представлении таблицы.

+0

@duncan_c Я знаю, что это сообщение SO завершено сейчас, но снова перечитайте его вопрос, OP заявил: «Я хочу сохранить выбранные значения каждого вида таблицы и сохранить его в массиве или что-то еще». Ваш ответ не имеет ничего общего с тем, с чем сталкивается OP. Просто подумал, что я даю тебе голову, прежде чем ты заберешь проголосовавший или что-то еще. Ciao – Pavan

+0

@Pavan, если вы читаете всю почту OPs, довольно ясно, что он/она спрашивает, как передавать информацию о выбранных ячейках из контроллера табличного представления до его родителя. –

+0

@duncan_c Ага, вы правы, извините. В конце он спрашивает об этом, поэтому мы оба отвечали на разные вопросы в своем посте. Мы должны объединить наш ответ;) Хороший день – Pavan

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