2015-09-17 2 views
0

У меня есть пользовательский cell с несколькими видами и кнопками в нем. С 1 из кнопок я выполняю Segue, и мне нужен номер этой ячейки, но я не знаю, как ее получить. Пожалуйста помоги.Как получить индексную ячейку пользовательской ячейки в методе PrepareForSegue - iOS

Вот как выглядит моя клетка:

enter image description here

prepareForSegue вызывается из красной кнопки облет.

Вот код:

- (NSInteger)numberOfSectionsInTableView:(UITableView *)tableView { 
    return _array.count; 
} 

- (NSInteger)tableView:(UITableView *)tableView numberOfRowsInSection:(NSInteger)section { 
    return 1; 
} 

- (UITableViewCell *)tableView:(UITableView *)tableView cellForRowAtIndexPath:(NSIndexPath *)indexPath { 

    NewsFeedCell *cell = [tableView dequeueReusableCellWithIdentifier:@"NewsFeedCell" forIndexPath:indexPath]; 
    if (cell) { 
     cell.item = _array[indexPath.section]; 
    } 

    return cell; 
} 

- (void)prepareForSegue:(UIStoryboardSegue *)segue sender:(id)sender { 

    if ([segue.identifier isEqualToString:@"AudioComment"]) 
    { 
     NSIndexPath *indexPath = [self.tableView indexPathForCell:sender]; 
     NSLog(@"%ld",(long)indexPath.section); //printing 0 everytime :(
    } 
} 

Просьба предоставить любую помощь/предложения о том, как я могу получить indexPath?

Спасибо.

+0

Может ли UITableView 'indexPathForSelectedRow' не делать трюк? (docs [здесь] (https://developer.apple.com/documentation/uikit/uitableview/1615000-indexpathforselectedrow)) – AmitaiB

ответ

1

Вы должны установить тег на кнопку. В вашем случае установите тег кнопки как indexPath.section в CellforRowAtIndexPath.

- (UITableViewCell *)tableView:(UITableView *)tableView cellForRowAtIndexPath:(NSIndexPath *)indexPath { 

    NewsFeedCell *cell = [tableView dequeueReusableCellWithIdentifier:@"NewsFeedCell" forIndexPath:indexPath]; 
    if (cell) { 
     cell.item = _array[indexPath.section]; 
    } 

    cell.button1.tag = indexPath.section; 
    return cell; 
} 

В PrepareForSegue, получите индекс от тега кнопки.

- (void)prepareForSegue:(UIStoryboardSegue *)segue sender:(id)sender { 

    if ([segue.identifier isEqualToString:@"AudioComment"]) 
    { 
     NSInteger index = ((UIButton *) sender).tag; 
     NSLog(@" %ld ",index); 
    } 
} 
+0

Лучшее решение, чем Hardik Shekat's :) Спасибо :) – hyd00

2

Вы можете использовать

UITableViewCell *cell = (UITableViewCell *)[[sender superview]superview]; 
NSLog(@"%ld",(long)[_generalTableView indexPathForCell:cell].row); 
+1

Это не будет работать, поскольку ячейка не будет выбрана, если вы нажмете на UIButton в ячейке таблицы , –

+0

@SebastianBorggrewe извините не прочитал вопрос. отредактировано – Misha

+0

'sender.superview.superview' строка дает ошибку:« свойство «супервизор» не найдено по типу объекта «__strong id» « – hyd00

1

Добавьте переменную для индекса и установить его при выборе ячейки. Получите доступ к переменной в perpareForSegue, передайте ее в destinationVC и 0.

+0

Я не выбираю ячейку, так как 'didSelectRowAtIndex' никогда не вызывается, потому что я нажимаю определенную кнопку в этой ячейке. Как я могу получить индекс – hyd00

1

Используйте приведенный ниже код. Это может вам помочь.

- (UITableViewCell *)tableView:(UITableView *)tableView cellForRowAtIndexPath:(NSIndexPath *)indexPath 
{ 
    MainPhotoCell *cell = (MainPhotoCell *)[tableView dequeueReusableCellWithIdentifier:@"CellIdentifierMedia" forIndexPath:indexPath]; 
    if (!cell) 
    { 
     cell = [[MainPhotoCell alloc] init]; 
    } 
    cell.usrCommentBtn.tag = indexPath.row; 
    [cell.usrCommentBtn addTarget:self action:@selector(onCommentClick:) forControlEvents:UIControlEventTouchUpInside]; 

    return cell; 
} 

- (void)onCommentClick:(id)sender 
{ 
    if ([GlobalManager checkUserLoginStatus:self]) 
    { 
     NSIndexPath *indexPath = [NSIndexPath indexPathForRow:([sender tag]) inSection:0]; 

     [self performSegueWithIdentifier:@"showComments" sender:indexPath]; 
    } 
} 

-(void)prepareForSegue:(UIStoryboardSegue *)segue sender:(id)sender 
{ 
    if ([segue.identifier isEqualToString: @"showComments"]) 
    { 
     NSIndexPath * path = (NSIndexPath *)sender; 
     //do the your required code here. 
    } 
} 
+0

Не работает :('onCommentClick' никогда не вызывается, прямая' prepareForSegue' вызывается. – hyd00

+0

не могли бы вы разместить свой код? –

+0

Не делайте этого "[cell.usrCommentBtn addTarget: self action: @selector (onCommentClick :) forControlEvents: UIControlEventTouchUpInside]; "- использовать ячейки прототипа с IBActions и делегатами из ячейки в VC – jarryd

Смежные вопросы