#iphone #uitableview #uibutton
#iPhone #uitableview #uibutton
Вопрос:
У меня есть 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]];
}
Комментарии:
1. Вы хотите, чтобы эта кнопка занимала всю ячейку?
2. Это помогло бы увидеть результаты этих операторов NSLog. И остальная часть вашего метода cellForRowAtIndexPath.
Ответ №1:
Надеюсь, я правильно понял вопрос — я обычно определяю тег на кнопке, добавленной в 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]];
В качестве альтернативы вы могли бы получить тот же результат, обратившись к супервизиям отправителя, но я нахожу это более сложным для отладки.
Ответ №2:
Я предпочитаю использовать:
-(void) openUrlInBrowser:(id)sender
{
UIButton * button = (UIButton *)sender;
NSString * url=[button.superview accessibilityHint];
[[UIApplication sharedApplication]openURL:[NSURL URLWithString:url]];
}
это не зависит от положения ячейки в таблице
Комментарии:
1. хорошо с вашим кодом, все понятно! Я добавил другое решение