English | 简体中文 | 繁體中文 | Русский язык | Français | Español | Português | Deutsch | 日本語 | 한국어 | Italiano | بالعربية
Сегодня я хочу поделиться своим опытом по созданию радио-кнопки в cell, пользовательской, не как на следующей картинке, которую можно найти в Интернете, я искал очень долго, в основном встречал статьи с галочками, поэтому я решил написать свою статью. У каждого приложения есть свой стиль, и нам не нужно всегда использовать галочки (они выглядят не очень стильно).
Мы реализуем такую форму. Она сразу стала выглядеть лучше, стала выше, не так ли?
Теперь я попытаюсь рассказать вам о нём. Этот метод может не быть очень хорошим, если есть гуру, пожалуйста, делитесь своими мыслями.
Сначала добавьте в свой пользовательский cell UIImageView, потому что вы, наверняка, будете иметь изображения для выбора и не выбора, поэтому этот UIImageView будет переключать изображения.
@property(nonatomic,strong)UIImageView *seletImage;
Внимание: почему здесь не используется кнопка? Я 主要考虑的是, если у кнопки только маленький кружок, то её трудно нажать. Мой метод в основном реализован с помощью дельгата метода didSelectRowAtIndexPath в UITableView.
Конечно, вам нужно добавить этот подвид в свой cell и инициализировать этот объект. Нужный код следует写在 соответствующем месте.
//添加到cell上 [self.contentView addSubview:self.seletImage]; //初始化 -(UIImageView *)seletImage{ if (!_seletImage) { _seletImage = [[UIImageView alloc]init]; } return _seletImage; } // координаты [self.seletImage mas_makeConstraints:^(MASConstraintMaker *make) { @strongify(self); make.right.equalTo(self.contentView.mas_right).with.offset(-15); make.centerY.equalTo(self.self.contentView); make.height.mas_equalTo(22); make.width.mas_equalTo(22); };
Затем нам также нужен ViewModel для cell, чтобы отслеживать изменения различных значений в cell, и в этом ViewModel мы добавим параметр для определения, был ли этот ряд cell нажат.
@property(nonatomic)BOOL isSelected;
Затем вернемся в эту cell и наблюдаем за изменениями параметра isSelected с помощью RAC, чтобы заменить изображение
[[[RACObserve(self.viewModel, isSelected) takeUntil:self.rac_prepareForReuseSignal] deliverOnMainThread] subscribeNext:^(NSString *x){ @strongify(self); if ([x boolValue]==YES) { [self.seletImage setImage:[UIImage imageNamed:@"alarmsetting_selected"]]; }else{ [self.seletImage setImage:[UIImage imageNamed:@"alarmsetting_notselected"]]; } };
Хорошо, последний шаг, вернемся в ViewController, связанный с этой cell, и поработаем над методом didSelectRowAtIndexPath.
-(void)tableView:(UITableView *)tableView didSelectRowAtIndexPath:(NSIndexPath *)indexPath{ [tableView deselectRowAtIndexPath:indexPath animated:YES]; //Пробегаем по массиву viewModel, если ViewModel соответствующего нажатого ряда одинакова, меняем isSelected на Yes, в противном случае на No for (NSInteger i = 0; i<[self.viewModel.ItemArray count]; i++) { ItemViewModel *itemViewModel = self.viewModel.ItemArray[i]; if (i != indexPath.row) { itemViewModel.isSelected = NO; } else if (i == indexPath.row) { itemViewModel.isSelected = YES; } } [self.tableView reloadData]; }
Просто объясню, так как у каждого cell есть соответствующий ViewModel, а этот ViewModel находится в массиве ViewModel в ViewController. Поэтому для этого эффекта遍яем, берем ViewModel соответствующего нажатого ряда, меняем параметры.
Вот и все, что есть в этой статье, надеюсь, это поможет вам в изучении. Также希望大家多多支持呐喊教程。
Заявление: содержание этой статьи взято из Интернета, авторские права принадлежат соответствующему автору. Контент предоставлен пользователями Интернета, самостоятельно загружен, сайт не имеет права собственности, не был отредактирован вручную и не несет ответственности за связанные с этим юридические вопросы. Если вы обнаружите спорное содержимое, пожалуйста, отправьте письмо по адресу: notice#oldtoolbag.com (во время отправки письма замените # на @), и предоставьте соответствующие доказательства. При обнаружении факта нарушения авторских прав сайт незамедлительно удаляет спорное содержимое.