Обнаружение, какой UIButton был нажат в UITableView

Кроме того, я предлагаю, чтобы Вы использовали Google библиотеки API Ajax, для загрузки внешних библиотек.

Это - инструмент разработчика Google, которые связывают библиотеки JavaScript крупных фирм и облегчают развертывать, обновлять и делать их легче, всегда используя сжатые версии.

кроме того, это делает Ваш проект более простым и легче, потому что Вы не должны загружать, скопируйте и поддержите файлы библиотек тезисов в своем проекте.

Использование это этот путь:

google.load("jquery", "1.2.3");
google.load("jqueryui", "1.5.2");
google.load("prototype", "1.6");
google.load("scriptaculous", "1.8.1");
google.load("mootools", "1.11");
google.load("dojo", "1.1.1");

211
задан Imanou Petit 5 December 2018 в 13:52
поделиться

9 ответов

В примере Apple Accessory используется следующий метод:

[button addTarget:self action:@selector(checkButtonTapped:) forControlEvents:UIControlEventTouchUpInside];

Затем в обработчике касания извлекается координата касания, и путь индекса вычисляется на основе этой координаты:

- (void)checkButtonTapped:(id)sender
{
    CGPoint buttonPosition = [sender convertPoint:CGPointZero toView:self.tableView];
    NSIndexPath *indexPath = [self.tableView indexPathForRowAtPoint:buttonPosition];
    if (indexPath != nil)
    {
     ...
    }
}
398
ответ дан 23 November 2019 в 04:32
поделиться

, вы можете использовать шаблон тега:

- (UITableViewCell *)tableView:(UITableView *)tableView cellForRowAtIndexPath:(NSIndexPath *)indexPath
{
     NSString *identifier = @"identifier";
     UITableViewCell *cell = [tableView dequeueReusableCellWithIdentifier:identifier];
     if (cell == nil) {
         cell = [[UITableView alloc] initWithStyle:UITableViewCellStyleDefault reuseIdentifier:identifier];
         [cell autorelelase];

         UIButton *button = [[UIButton alloc] initWithFrame:CGRectMake(10, 5, 40, 20)];
         [button addTarget:self action:@selector(buttonPressedAction:) forControlEvents:UIControlEventTouchUpInside];
         [button setTag:[indexPath row]]; //use the row as the current tag
         [cell.contentView addSubview:button];

         [button release];
     }

     UIButton *button = (UIButton *)[cell viewWithTag:[indexPath row]]; //use [indexPath row]
     [button setTitle:@"Edit" forState:UIControlStateNormal];

     return cell;
}

- (void)buttonPressedAction:(id)sender
{
    UIButton *button = (UIButton *)sender;
    //button.tag has the row number (you can convert it to indexPath)
}
0
ответ дан 23 November 2019 в 04:32
поделиться

Я бы использовал свойство тега, как вы сказали, установив тег следующим образом:

[button setTag:indexPath.row];

затем получив тег внутри buttonPressedAction следующим образом:

((UIButton *)sender).tag

Или

UIButton *button = (UIButton *)sender; 
button.tag;
3
ответ дан 23 November 2019 в 04:32
поделиться

Я всегда использую теги.

] Вам необходимо создать подкласс UITableviewCell и обрабатывать нажатие кнопки оттуда.

0
ответ дан 23 November 2019 в 04:32
поделиться

Хотя мне нравится способ использования тегов ... если вы не хотите использовать теги по какой-либо причине, вы можете создать элемент NSArray готовых кнопок:

NSArray* buttons ;

, затем создать эти кнопки перед рендерингом tableView и вставить их в массив.

Затем внутри tableView: cellForRowAtIndexPath: , вы можете выполнить:

UIButton* button = [buttons objectAtIndex:[indexPath row] ] ;
[cell.contentView addSubview:button];

Затем в функции buttonPressedAction: вы можете выполнить

- (void)buttonPressedAction:(id)sender {
   UIButton* button = (UIButton*)sender ;
   int row = [buttons indexOfObject:button] ;
   // Do magic
}
3
ответ дан 23 November 2019 в 04:32
поделиться

Found a nice solution to this problem elsewhere, no messing around with tags on the button:

- (void)buttonPressedAction:(id)sender {

    NSSet *touches = [event allTouches];
    UITouch *touch = [touches anyObject];
    CGPoint currentTouchPosition = [touch locationInView:self.tableView];
    NSIndexPath *indexPath = [self.tableView indexPathForRowAtPoint: currentTouchPosition];

    // do stuff with the indexPath...
}
6
ответ дан 23 November 2019 в 04:32
поделиться

Я обнаружил, что метод использования супервью для получения ссылки на indexPath ячейки работает отлично. Спасибо iphonedevbook.com (macnsmith) за подсказку link text

-(void)buttonPressed:(id)sender {
 UITableViewCell *clickedCell = (UITableViewCell *)[[sender superview] superview];
 NSIndexPath *clickedButtonPath = [self.tableView indexPathForCell:clickedCell];
...

}
48
ответ дан 23 November 2019 в 04:32
поделиться

Я что-то упустил? Разве вы не можете просто использовать отправителя для идентификации кнопки. Отправитель предоставит вам такую ​​информацию:

<UIButton: 0x4b95c10; frame = (246 26; 30 30); opaque = NO; tag = 104; layer = <CALayer: 0x4b95be0>>

Затем, если вы хотите изменить свойства кнопки, скажите фоновое изображение, которое вы просто сообщите отправителю:

[sender setBackgroundImage:[UIImage imageNamed:@"new-image.png"] forState:UIControlStateNormal];

Если вам нужен тег, то метод ACBurk подойдет.

0
ответ дан 23 November 2019 в 04:32
поделиться
// how do I know which button sent this message?
// processing button press for this row requires an indexPath.

На самом деле довольно просто:

- (void)buttonPressedAction:(id)sender
{
    UIButton *button = (UIButton *)sender;
    CGPoint rowButtonCenterInTableView = [[rowButton superview] convertPoint:rowButton.center toView:self.tableView];
    NSIndexPath *indexPath = [self.tableView indexPathForRowAtPoint:rowButtonCenterInTableView];
    MyTableViewItem *rowItem = [self.itemsArray objectAtIndex:indexPath.row];
    // Now you're good to go.. do what the intention of the button is, but with
    // the context of the "row item" that the button belongs to
    [self performFooWithItem:rowItem];
}

Хорошо работает для меня: P

если вы хотите изменить настройку целевого действия, вы можете включить параметр события в метод, а затем использовать касания этого события для разрешения координаты касания. Координаты по-прежнему необходимо разрешить в границах сенсорного представления, но некоторым это может показаться проще.

0
ответ дан 23 November 2019 в 04:32
поделиться
Другие вопросы по тегам:

Похожие вопросы: