Подпишем мое приложение управляет UITableViewController, где я устанавливаю пользовательские ячейки, являющиеся экземплярами подкласса UITableViewCell.Значение тега UIButton не проходит в методе prepareForSegue в UITableViewController
Одним из свойств этого класса к югу является UIButton называется flameRelation:
@property (weak) IBOutlet UIButton* flameRelation;
Я создаю динамический SEGUE к контроллеру вида детали в зависимости от класса отправителя. Если отправитель является самой ячейкой, я передаю данный набор данных в контроллер подробных представлений. Если отправитель - кнопка пламени, я передаю другую.
Для достижения этой цели, я смотрю на следующий 2-шагового подхода:
1) Так как мне нужно знать indexpath.row ячейки, где была нажата кнопка FlameRelation, я установил, что тег кнопка в методе UITableView, который устанавливает каждую клетку моего корма следующим образом:
- (UITableViewCell*)tableView:(UITableView *)tableView cellForRowAtIndexPath:(NSIndexPath *)indexPath {
//Set a bunch of things before setting UIButton flameRelation tag
[cell.flameRelation setTag:indexPath.row];
И я печатая тег, который позволяет мне проверить, что тег создается, когда я прокручиваю вниз мой канал после запуска моей сборки (Я вижу числа, увеличивающиеся при прокрутке вниз, как и ожидалось).
NSLog(@"The button tag for this cell is set to %ld",(long)[cell.flameRelation tag]);
2) В способе prepareForSegue, что позволяет пользователю переходить к контроллеру вида детали с соответствующей информацией, я проверить класс отправителя первым. Если класс отправителем является UIButton, я пытаюсь передать нужную информацию в контроллер представления детали, установив значение indexpath к значению тега:
- (void)prepareForSegue:(UIStoryboardSegue *)segue sender:(id)sender {
if([segue.identifier isEqualToString:@"FlameDetail"]) {
FlameDetailViewController* flameDetailController = (FlameDetailViewController*) segue.destinationViewController;
if ([sender isKindOfClass:[FlameCellTableViewCell class]])
{
NSIndexPath* indexPath = [self.tableView indexPathForCell:sender];
NSLog(@"The indexPath is: %@", indexPath);
flameDetailController.flame = [self.feed flameAtIndex:indexPath.row];
NSLog(@"class for object sender: %@", NSStringFromClass([sender class]));
}
else if ([sender isKindOfClass:[UIButton class]])
{
NSLog(@"The button tag is set to %ld",(long)[sender tag]);
NSIndexPath* indexPath = [NSIndexPath indexPathForRow:[sender tag] inSection:0];
NSLog(@"The indexPath from UIButton is: %@", indexPath);
flameDetailController.flame = [self.feed flameAtIndex:indexPath.row];
NSLog(@"The value of indexPath.row is %ld",(long)indexPath.row);
NSLog(@"class for object sender: %@", NSStringFromClass([sender class]));
flameDetailController.findOutView.hidden = NO;
[flameDetailController.flameAction setTitle:@"CHAT NOW" forState:UIControlStateNormal];
NSLog(@"Yes, the sender is UIButton");
NSLog(@"The title of flameAction is set to %@", flameDetailController.flameAction.titleLabel.text);
}
}
Все работает хорошо, если я нажимаю на сама ячейка, но если я нажму кнопку пламениRelation, я вижу в своих журналах, что метка getter on возвращает 0. Который, очевидно, не передает правильную информацию в контроллер целевого представления.
Спасибо!
В prepareForSegue, это условный оператор UIButton выполнить? Если вы поставили точку останова, имеет ли значение sender.tag значение? – brandonscript
Вы говорите утверждение 'IndexPath от UIButton:' всегда печатает 0? – Abhinav
Привет @remus и Abhinav: Да, [тег отправителя] всегда установлен в 0. Условный оператор UIButton выполняется, и когда я печатаю значение тега, я вижу 0. Это не нормально. – renaissance17