Пользовательские UiableViewcell и ibaction
-
29-09-2019 - |
Вопрос
У меня есть пользовательский UiableViewCell, на котором я добавил кнопку, я ассоциировал эту кнопку на iBaction в моем просмотру концентратора. Теперь проблема, которую я сталкиваюсь, это то, как я знаю, из какой клетки этой кнопки созданы. Когда я представляю мой ViewController, который имеет таблицу в нем и имеет несколько строк (Custom UiableViewCell), теперь, когда пользователь нажимает кнопку, которое вызывается действие, но как мне знать, какой ряд был.
Потому что на основе индекса строк мне нужно сохранить какое -то значение.
РЕДАКТИРОВАТЬ: Сейчас у меня есть некоторая подсказка, но все же я не уверен, как я это сделаю, так что кажется, что на моем методе TableViewController CellForrowAtIndexPath мне нужно что -то подобное
[cell.button1 addTarget:self action:@selector(addToCart:) forControlEvents:UIControlEventTouchUpInside];
И тогда я должен написать метод
-(IBAction) addToCart:(id) sender
Но все же то, что я не знаю, это то, как я могу получить индекс ряд в моем методе AddtoCart. Ценю твою помощь.
Решение
Хорошо, наконец, я получил ответ, изучая разные форумы, люди предлагали сделать что -то подобное
В контроллере представления таблицы в CellForrowRorwAtIndexPath сделайте это
cell.addToCart.tag = indexPath.row;
[cell.addToCart addTarget:self action:@selector(addToCart:)
forControlEvents:UIControlEventTouchUpInside];
где addtocart - это название Uibutton в моем CustomibleViewCell. Кажется, это не сработало для меня. Так это то, что я сделал
-(IBAction) addToCart:(id) sender{
NSIndexPath *indexPath = [self.tableView indexPathForCell:(UITableViewCell *)
[[sender superview] superview]];
NSLog(@"The row id is %d", indexPath.row);
}
А затем через InterfaveBuilder я связал действие моей кнопки для AddtoCart Ibaction на моем контроллере представления на столе.
Другие советы
Гораздо менее хакеровский.
[cell.button1 addTarget:self action:@selector(addToCart:event:) forControlEvents:UIControlEventTouchUpInside];
- (void)addToCart:(id)sender event:(id)event
{
NSSet *touches = [event allTouches];
UITouch *touch = [touches anyObject];
CGPoint currentTouchPosition = [touch locationInView:self.tableView];
NSIndexPath *indexPath = [self.tableView indexPathForRowAtPoint: currentTouchPosition];
}
Принятый ответ больше не работает. Пожалуйста, обратитесь к это сообщение
Это делает это таким образом:
- (void)checkButtonTapped:(id)sender
{
CGPoint buttonPosition = [sender convertPoint:CGPointZero toView:self.tableView];
NSIndexPath *indexPath = [self.tableView indexPathForRowAtPoint:buttonPosition];
if (indexPath != nil)
{
...
}
}
Многие из разработчиков использовали пользовательские представления, чтобы показать пользовательскую ячейку на табличном представлении для более старой версии iOS. Если вы один из них, то вам придется столкнуться с проблемой, что ваша кнопка нажимает действие, больше не будет работать с iOS7.
Как решить это:
У вас есть два варианта:
Опция 1: Создайте новый прокладку с новой табличной ячейкой вместо того, чтобы просмотреть. и поместите все макеты снова в табличную ячейку.
Я знаю, это потребует много усилий. Если вы не хотите этого делать, у нас очень небольшой взлом для него: вариант 2
Вариант 2: Создайте iBoutlet для вашей кнопки и добавьте эту кнопку в качестве подвига представления содержимого вашей ячейки.
[self.myCell.contentView addSubview:self.btn_click];
Вышеуказанная линия кода добавит BTN_CLICK в виде подсчета вашего контента. Теперь кнопка Нажмите действие должно работать.