Как использовать 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:
).