Вопрос

У меня есть пользовательский 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 в виде подсчета вашего контента. Теперь кнопка Нажмите действие должно работать.

Лицензировано под: CC-BY-SA с атрибуция
Не связан с StackOverflow
scroll top