Выполнить действие над кнопкой в ​​UITableView - PullRequest
0 голосов
/ 04 октября 2011

У меня есть UIButton в UITableViewCell ... Я хочу выполнить действие на UIButton ..

Мне нужно отправить данные в метод @selector, зарегистрированный для этой кнопки, чтобы я могвыполнять действия, когда пользователь нажимает эту кнопку.

Как это сделать, хотя я обнаружил, что параметр (id) sender внутри функции выбора не всегда является исходной кнопкой, созданной в функции cellForRowAtIndexPath.

Внутри функции cellForRowAtIndexPath:

UIImage* pdfImage = [UIImage imageNamed:@"icon_pdf.png"];
UIButton* pdfButton = [UIButton buttonWithType:UIButtonTypeCustom];
[pdfButton setImage:pdfImage forState:UIControlStateNormal];
pdfButton.accessibilityHint = @"path/to/pdf/file";
pdfButton.frame = CGRectMake(0, 0, 40, 40);
[pdfButton addTarget:self action:@selector(openUrlInBrowser:) forControlEvents:UIControlEventTouchUpInside];
cell.accessoryView = pdfButton;

Вот функция отправителя:

-(void) openUrlInBrowser:(id)sender
{
    NSLog(@"%@", [sender class]);
    NSString * url=[sender accessibilityHint];
    NSLog(@"%@",url);
    NSLog(@"%@",sender);
    [[UIApplication sharedApplication]openURL:[NSURL URLWithString:url]];
}

Ответы [ 2 ]

1 голос
/ 04 октября 2011

Надеюсь, я правильно понимаю вопрос - я обычно определяю тег на кнопке, добавленной в uitableview, который является индексом строки.В cellForRowAtIndexPath:

[button setTag:indexPath.row];

Затем вы можете получить его обратно в целевом методе:

- (void) showdatabases:(id) sender {
int row = [[sender valueForKey:@"tag"] intValue];
...

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

UITableViewCell* cell = [self.tableView cellForRowAtIndexPath:[NSIndexPath indexPathForRow:row inSection:0]];

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

0 голосов
/ 04 октября 2011

Я предпочитаю использовать:

-(void) openUrlInBrowser:(id)sender
{
  UIButton * button = (UIButton *)sender;
  NSString * url=[button.superview accessibilityHint];
  [[UIApplication sharedApplication]openURL:[NSURL URLWithString:url]];
}

не зависит от положения ячейки в таблице

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...