iOS, как получить текущую выбранную строку indexpath в методе cellForRowAtIndexPath? - PullRequest
5 голосов
/ 12 сентября 2011

Я хочу сделать ссылку, используя метку в каждой ячейке таблицы.

При щелчке по ссылке таблица получит [indexpath row] ячейки, и мы будем использовать этот индекс для сопоставления с индексом массива, содержащим строковые данные. Строка будет отправлена ​​на следующую push-страницу.

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

Как получить в текущей строке indexpath метку для выбранной ячейки? Это мой пример кода:

 -(UITableViewCell *)tableView:(UITableView *)tableView cellForRowAtIndexPath:(NSIndexPath *)indexPath{
...
UITapGestureRecognizer *gestureRec = [[UITapGestureRecognizer alloc] initWithTarget:self action:@selector(openUrl:) ];
gestureRec.numberOfTouchesRequired = 1;
gestureRec.numberOfTapsRequired = 1;
[cell.listPrice addGestureRecognizer:gestureRec];
[gestureRec release];
...
}


- (void)openUrl:(id)sender
{
NSLog(@"DOwnload URL send >> %@",urlDownloadSend);
DownloadNowController *download =[[DownloadNowController alloc]initWithNibName:@"DownloadNowController" bundle:nil];
[self.navigationController pushViewController:download animated:YES];
[download release]; 
}

Ответы [ 6 ]

15 голосов
/ 12 сентября 2011

Чтобы определить текущую выбранную ячейку, вы можете использовать следующий метод UITableView:

- (NSIndexPath *)indexPathForSelectedRow

Но я не уверен, что ваша ячейка будет выбрана после UITapGestureRecognizer.

Советую хранить строку ячейки непосредственно в gestureRec.view в tag свойстве:

gestureRec.view.tag = indexPath.row;

Затем в openUrl вы можете определить выбранную ячейку, получив значение sender.view.tag

3 голосов
/ 12 сентября 2011

Не очень понятно, что вы хотите сделать ... у вас есть ссылка на UITableViewCell, которая запускает некоторые другие действия?

UITableViewDelegate дает вам действительно крутых методов, называемых:

– tableView:willSelectRowAtIndexPath:
– tableView:didSelectRowAtIndexPath:
– tableView:willDeselectRowAtIndexPath:
– tableView:didDeselectRowAtIndexPath:

Когда вы нажимаете на ячейку, вызываются willSelectRowAtIndexPath и didSelectRowAtIndexPath - предоставляя вам выбранный в данный момент NSIndexPath, который затем можно использовать для получения строки следующим образом:

indexPath.row;
2 голосов
/ 12 сентября 2011

Вы можете использовать глобальную переменную, чтобы сохранить значение indexpath.row

сохранить строку в didSelectRow:atIndexPath: методе

var = indexPath.row;
[tableView reloadData];

var = indexPath.row;
[tableView reloadData];

затем используйте его в cellForRowAtIndexPath

if(indexPath.row==var){

}

1 голос
/ 12 сентября 2011

вы можете сделать так

в методе источника данных cellForRowAtIndexPath

UIImageView* selectedBg = [[UIImageView alloc]initWithImage:[UIImage imageNamed:@"bg_selected.png"]];

cell.backgroundView = [[UIView alloc] initWithFrame: CGRectZero];
cell.selectedBackgroundView = selectedBg;
[cell.backgroundView setNeedsDisplay];
[selectedBg release];
1 голос
/ 12 сентября 2011

Вы можете реализовать метод – tableView:willSelectRowAtIndexPath: в вашем UITableViewDelegate. Там вы можете легко получить информацию об indexPath.

0 голосов
/ 01 января 2017

Следующий код можно использовать для получения текущей выбранной строки indexpath:

- (void)tableView:(UITableView *)tableView didSelectRowAtIndexPath: (NSIndexPath *)indexPath {

 NSLog(@"selected tableview row is %ld",(long)indexPath.row);
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...