Как использовать UISegmentedControl для управления ячейками UITableView?

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

Изображения ячеек являются частью массива и были настроены с использованием пользовательской ячейки.

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

Заранее спасибо!

Сегмент управления в моем UIView.h определяется так

@property (слабый, неатомный) IBOutlet UISegmentedControl *selectedSegment

Я еще не включил IBAction, так как я не на 100%, куда он должен идти или как он будет написан.

В моем табличном представлении мои ячейки в настоящее время определены так же, как в cellForRowAtIndexPath

cell.itemImageView.image = [UIImage imageNamed:[icons objectAtIndex:indexPath.row]];

Мои мысли заключались в том, чтобы поместить оператор switch в метод cell, чтобы каждый случай указывал на свой набор значков,

switch (something)
{
    case 0:
    cell.itemImageView.image = [UIImage imageNamed:[iconSetOne objectAtIndex:indexPath.row]];
    break;

    case 1:
    cell.itemImageView.image = [UIImage imageNamed:[iconSetTwo objectAtIndex:indexPath.row]];
    break;

    default
    break;
}

Но я почти уверен, что это неправильный способ сделать это, и "кое-что" - это то, на чем я застрял.

1 ответ

Решение

1) В простом UIView где у вас есть сегментированный контроль:

  • Определить точку _tableViewController что вы подключаетесь к контроллеру вашего табличного представления
  • Определите метод действия segmentedControlChanged: который реагирует на срабатывание сегментированного управления

2) В табличном представлении контроллера:

  • Определить свойство selectedSegmentIndex типа NSInteger

3) Теперь добавьте реализацию для метода действия:

- (void) segmentedControlChanged:(id)sender
{
  UISegmentedControl* segmentedControl = (UISegmentedControl*)sender;
  _tableViewController.selectedSegmentIndex = segmentedControl.selectedSegmentIndex;
  [_tableViewController.tableView reloadData];
}

4) В контроллере табличного представления вы можете добавить switch заявление, что вы предложили tableView:cellForRowAtIndexPath::

switch (self.selectedSegmentIndex)
{
  [...]
}

Обратите внимание, что вызывая reloadData на шаге 3 - грубый способ заставить табличное представление обновить все ячейки с правильными изображениями. Есть другие методы в UITableView которые дают вам более детальный контроль над тем, какие ячейки вы хотите обновить (например, reloadSections:withRowAnimation:).

Другие вопросы по тегам