Как я могу получить uitableViewCell по indexPath? - PullRequest
68 голосов
/ 05 марта 2010

Как я могу получить UITableViewCell на indexPath?Вот так:

Я использую UIActionSheet, когда я нажимаю подтвердить UIButton Я хочу изменить текст ячейки.

NowIndex, который я определяю как свойство

- (void)actionSheet:(UIActionSheet *)actionSheet clickedButtonAtIndex:(NSInteger)buttonIndex
{
    if (buttonIndex == 0)
    {
        NSInteger section =  [nowIndex section];
        NSInteger row = [nowIndex row];
        NSDateFormatter *formatter = [[[NSDateFormatter alloc] init] autorelease];
        formatter.dateFormat = @"yyyy-MM-dd";

        if (section == 0)
        {
            if (row == 0)
            {

            }
            else if (row == 1)
            {
                UILabel *content = (UILabel *)[[(UITableView *)[actionSheet ] cellForRowAtIndexPath:nowIndex] viewWithTag:contentTag];
                content.text = [formatter stringFromDate:checkInDate.date];
            }
            else if (row == 2)
            {

            }
        }
    }
}

Ответы [ 8 ]

114 голосов
/ 05 марта 2010
[(UITableViewCell *)[(UITableView *)self cellForRowAtIndexPath:nowIndex]

даст вам подходящий вид. Но я не уверен, что именно вы просите! Потому что у вас есть этот код, и все же вы спрашиваете, как получить uitableviewcell. Еще немного информации поможет вам ответить:)

ADD: Вот альтернативный синтаксис, который достигает того же самого без приведения.

UITableViewCell *cell = [self.tableView cellForRowAtIndexPath:nowIndex];
27 голосов
/ 05 марта 2010

Наконец, я получаю ячейку, используя следующий код:

UITableViewCell *cell = (UITableViewCell *)[(UITableView *)self.view cellForRowAtIndexPath:nowIndex];

Поскольку класс продлен UITableViewController:

@interface SearchHotelViewController : UITableViewController

Итак, self - это "SearchHotelViewController".

20 голосов
/ 23 марта 2016

Вот код для получения пользовательской ячейки из пути индекса

 NSIndexPath *indexPath = [NSIndexPath indexPathForRow:2 inSection:0];
 YourCell *cell = (YourCell *)[tblRegister cellForRowAtIndexPath:indexPath];

Для Swift

let indexpath = NSIndexPath(forRow: 2, inSection: 0)
let currentCell = tblTest.cellForRowAtIndexPath(indexpath) as! CellTest

Для Swift 4 (для коллекции)

let indexpath = NSIndexPath(row: 2, section: 0)
let cell = self.colVw!.cellForItem(at: indexpath as IndexPath) as? ColViewCell
10 голосов
/ 07 ноября 2017

Для Swift 4

    let indexPath = IndexPath(row: 0, section: 0)
    let cell = tableView.cellForRow(at: indexPath)
6 голосов
/ 02 июня 2015

Вы можете использовать следующий код для получения последней ячейки.

UITableViewCell *cell = [tableView cellForRowAtIndexPath:lastIndexPath];
6 голосов
/ 05 марта 2010

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

-(void) changeCellText:(NSIndexPath *) nowIndex{
    UILabel *content = (UILabel *)[[(UITableViewCell *)[(UITableView *)self cellForRowAtIndexPath:nowIndex] contentView] viewWithTag:contentTag];
    content.text = [formatter stringFromDate:checkInDate.date];
}
4 голосов
/ 10 июля 2017

Swift

let indexpath = IndexPath(row: 0, section: 0)
if let cell = tableView.cellForRow(at: indexPath) as? <UITableViewCell or CustomCell> {
    cell.backgroundColor = UIColor.red
}
4 голосов
/ 01 июня 2017

Swift 3

let indexpath = NSIndexPath(row: 0, section: 0)
let currentCell = tableView.cellForRow(at: indexpath as IndexPath)!
...