2013-08-26 7 views
-3

У меня возникли проблемы с моей таблицей, не запускающей метод didSelectRowAtIndexPath. Я осуществил делегат как таковые:didSelectRowAtIndexPath не работает

@interface ViewController : UIViewController<UITableViewDataSource, UITableViewDelegate,UIScrollViewDelegate> 

И в моей раскадровке источник данных в Tableview и делегат оба указали на базе View Controller. У меня есть взаимодействие с пользователем, а также выбор, выделенный для Single Selection, и это не проблема TapGesture, поскольку мои жесты касания не привязаны к представлению, и я проверил, и они не срабатывают.

Это код для создания таблицы:

-(NSInteger)tableView:(UITableView *)tableView numberOfRowsInSection:(NSInteger)section{ 
    return menuArray.count; 
} 
-(NSInteger)numberOfSectionsInTableView:(UITableView *)tableView{ 
    return 1; 
} 
-(UITableViewCell*)tableView:(UITableView *)tableView cellForRowAtIndexPath:(NSIndexPath *)indexPath{ 
    UITableViewCell *cell = [tableView dequeueReusableCellWithIdentifier:@"menuCell"]; 
    NSDictionary *menuItem = [menuArray objectAtIndex:indexPath.row]; 

    cell.textLabel.text = menuItem[@"Title"]; 
    cell.detailTextLabel.text = menuItem[@"Subtitle"]; 
    return cell; 
} 
-(void)showMenu{ 
    [UIView animateWithDuration:.25 animations:^{ 
     [content setFrame:CGRectMake(menuTable.frame.size.width, content.frame.origin.y, content.frame.size.width, content.frame.size.height)]; 
    }]; 
} 
-(void)hideMenu{ 
    [UIView animateWithDuration:.25 animations:^{ 
    [content setFrame:CGRectMake(0, content.frame.origin.y, content.frame.size.width,  content.frame.size.height)]; 
    }]; 
} 
-(IBAction)showMenuDown:(id)sender { 
    if(content.frame.origin.x == 0) 
     [self showMenu]; 
    else 
     [self hideMenu]; 
} 
-(void)tableView:(UITableView *)tableView didSelectRowAtIndexPath:(NSIndexPath *)indexPath{ 
    //whatever 
} 

В таблице первоначально из поля зрения на раскадровке (origin.x установлен в -150), а затем, когда пользователь нажимает на кнопку в navigationBar представление скользит, чтобы выявить его, что может вызвать проблемы, которые я думаю.

Есть ли что-то не в порядке с моим кодом или реализацией, которая может привести к тому, что это не сработает?

+0

Вероятно очевидный вопрос, но вы уверены, что вы установили как делегат и DataSource в Tableview? – cobbal

+0

@cobbal да, я связал их в раскадровке с контроллером представления, и я реализовал их в файле .h – gta0004

+0

добавьте '[tableView deselectRowAtIndexPath: indexPath];' в ваш метод didSelectRowAtIndexPath. Если строка отменяется при поднятии пальца, проблема заключается в методе 'changeImage:'. – Jsdodgers

ответ

0

Если вы уже видите, что ваша таблица заполнена значениями из вашего словаря, вы можете исключить источник данных и делегировать их как проблему. т. е. ваши раскадровки работают.

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

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

    //NSLog(@"Inside cellForRowAtIndexPath"); 

    static NSString *CellIdentifier = @"Cell"; 

    // Try to retrieve from the table view a now-unused cell with the given identifier. 
    UITableViewCell *cell = [tableView dequeueReusableCellWithIdentifier:CellIdentifier]; 

    // If no cell is available, create a new one using the given identifier. 
    if (cell == nil) 
    { 
     // Use the default cell style. 
     cell = [[UITableViewCell alloc] initWithStyle:UITableViewCellStyleDefault reuseIdentifier:CellIdentifier]; 
    } 

//Your code here 
// .... 

return cell; 

} 
0
UITableViewCell *cell = [tableView dequeueReusableCellWithIdentifier:@"menuCell"]; 

Это будет возвращать ноль в случае никогда не была ячейка создана.

поэтому проверка, если ячейка равна нулю, является обязательной, и если да, вам необходимо создать ячейку.

static NSString *CellIdentifier = @"menuCell"; 
UITableViewCell *cell = [tableView dequeueReusableCellWithIdentifier:CellIdentifier]; 
if(cell == nil) { 
    cell = [tableView dequeueReusableCellWithIdentifier:CellIdentifier]; 
} 

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

UITableViewCell * cell = [tableView dequeueReusableCellWithIdentifier:CellIdentifier forIndexPath:indexPath]; 

для прототипа клеток. Убедитесь, что вы используете один и тот же идентификатор в раскадровке и что вы зарегистрировали ваш ячейки класса

- (void) viewDidLoad { 
    [super viewDidLoad]; 

    [self.tableView registerClass:[UITableViewCell class] forCellReuseIdentifier:@"menuCell"]; 
} 
Смежные вопросы