UITableView didSelectRowAtIndexPath: не работает - PullRequest
4 голосов
/ 18 ноября 2011

Когда я выбираю строку таблицы, ничего не происходит. Это не пошло к ContentController, и я не могу найти UILabel, который я объявил на ContentController.h, когда я хочу связать его с resultLabel.

- (void)tableView:(UITableView *)tableView didSelectRowAtIndexPath:(NSIndexPath *)indexPath {
    ContentController *detailview = [[ContentController alloc] initWithNibName:@"ContentController" bundle:nil];    
    detailview.detailString = [NSString stringWithFormat:@"%d",indexPath.row];
    [self.navigationController pushViewController:detailview animated:YES];     
    [detailview release];
}

ContentController

- (void)viewDidLoad
{
    [super viewDidLoad];
    // Do any additional setup after loading the view from its nib.
    resultLabel.text = self.detailString;
}

Ответы [ 11 ]

15 голосов
/ 18 ноября 2011

Это может быть связано с тем, что вы не установили свойство табличного представления для делегирования и источника данных:

tableview.delegate=self;
tableview.datasource=self;

или установить их свойство в xib - это еще один вариант

3 голосов
/ 20 ноября 2012

clickable == NO

Может быть состояние, которое в методе cellForRowAtIndexPath:

cell = [self tableCellWithHeight:height clickable:NO withArrowAccessory:NO];

if clickable == NO, тогда метод didSelectRowAtIndexPath никогда не будет вызываться для этой ячейки.

2 голосов
/ 05 марта 2014

Еще одна вещь, которую необходимо проверить, - убедиться, что ячейки прототипа и их режим выбора или стиль выбора.

Перейти к построителю интерфейса >>> служебные окна справа >>> инспектор атрибутов >>> Искать выпадающий список Выбор.

В уроке по apple, который я читал, вам предлагается установить его равным none, чтобы было похоже, что делегат didSelect не запускается. Установка режима выбора на none, эффективно нейтрализовала эту способность. Я изменил это на Single Selection, и все снова заработало.

0 голосов
/ 21 апреля 2016

Моя ситуация - я забыл установить Свойство делегата tableView.Возможно, вам следует подключить делегат tableView к текущему контроллеру представления.

0 голосов
/ 09 января 2016

Это может произойти, если вы не добавили делегата табличного представления и источника данных. Пожалуйста, убедитесь, что и добавьте эти две строки в ваше представление, загруженные методы

     tableview.delegate=self;
     tableview.datasource=self;
0 голосов
/ 28 сентября 2015

Проверьте, реализуете ли вы этот метод

- (BOOL)tableView:(UITableView *)tableView shouldHighlightRowAtIndexPath: (NSIndexPath *)indexPath
{
     return NO;
}

отключить выбор ячейки

0 голосов
/ 04 июля 2013

Ну, у меня был какой-то другой сценарий, у меня HJManaged Изображение в UITableView ячейке, а HJManaged Изображение имеет свой собственный метод нажатия в delegate, поэтому, когда я нажимаю на представление таблицы вместо didSelectRowAtIndexPath, метод передачи делегата HJManaged Изображение вызывается.

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

0 голосов
/ 22 мая 2013

При создании ячейки (для cellForRowAtIndexPath) следует пометить:

userInteractionEnabled свойство Определить, может ли ячейка быть выбрана (при нажатии должна вызываться -didSelectRowAtIndexPath).

if (!isClickable) {
    cell.userInteractionEnabled = NO;
}

свойство selectionStyle: Определите, будет ли выбранный вид фона отображаться при нажатии.

cell.selectionStyle = isClickable ? UITableViewCellSelectionStyleBlue : UITableViewCellSelectionStyleNone;
0 голосов
/ 31 марта 2013

Вот изображение установки источника данных и делегата в конструкторе интерфейса для UITableview что необходимо для метода ниже, чтобы стрелять на ощупь.

..

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

                - (NSInteger)tableView:(UITableView *)tableView numberOfRowsInSection:(NSInteger)section
                {
                    return [self.myAlphabet count];
                }

                - (UITableViewCell *)tableView:(UITableView *)tableView cellForRowAtIndexPath:(NSIndexPath *)indexPath
                {
                    UITableViewCell *cell = [tableView dequeueReusableCellWithIdentifier:@"Cell" forIndexPath:indexPath];    
                    cell.textLabel.text = [self.myAlphabet objectAtIndex:indexPath.row];
                    return cell;
                }

                - (void)tableView:(UITableView *)tableView didSelectRowAtIndexPath:(NSIndexPath *)indexPath
                {
                    //method for getting text (can be changed to push views)
                    NSString*mystring;
                    mystring = [self.tableView cellForRowAtIndexPath:indexPath].textLabel.text;
                    NSLog(@"%@",mystring);    
                }

Setting datasource and delegate in interface builder

0 голосов
/ 18 ноября 2011

в вашем ContentController.h

NSString *detailString;

@property (nonatomic, retain) detailString;

ContentController.m

@synthesize detailString;

И в вашем классе, где у вас есть табличное представление. установить делегат табличного представления и источник данных на себя (в xib - на владельца файла).

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