2013-02-19 3 views
-1

У меня возникла проблема с вызовом метода didselectrowatindexpath. Мой TableView устанавливается в viewdidload следующим образом:didselectrowatindexpath не вызван

- (void)viewDidLoad 
{ 
    //[super viewDidLoad]; 

    self.tableView.delegate = self; 
    self.tableView.dataSource = self; 
    [self.tableView reloadData]; 
    self.detailViewController = (klViewController *)[[self.splitViewController.viewControllers lastObject] topViewController]; 

} 

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

- (UITableViewCell *)tableView:(UITableView *)tableView cellForRowAtIndexPath:(NSIndexPath *)indexPath 
{ 
    static NSString *CellIdentifier = @"menuSelection1"; 
    UITableViewCell *cell = [tableView dequeueReusableCellWithIdentifier:CellIdentifier]; 
    if (cell == nil) { 
     cell = [[UITableViewCell alloc] initWithStyle:UITableViewCellStyleDefault reuseIdentifier:CellIdentifier]; 
    } 


    AmbassadorInfoData * data = [self.LoadMenuItems objectAtIndex:indexPath.row]; 
    cell.textLabel.text = data.treeName; 

    return cell; 
} 

Я проверил другие ответы, и в основном сказал, что может быть может использоваться использование didDeselectRowAtIndexPath. Но здесь это не так. Теперь моя проблема заключается в моем контроллере разделенного представления всякий раз, когда я выбираю любую опцию, соответствующее подробное представление не отображается и пустое. Ни один из моих методов в контроллере rootview (klViewController) не вызван. Что может быть причиной этого? Ниже перечислены все методы, связанные с UITableView. Он реализуется в том же классе, что и в viewDidLoad

#pragma mark - Table view data source 

- (NSInteger)numberOfSectionsInTableView:(UITableView *)tableView 
{ 

    // Return the number of sections. 
    return 1; 
} 

- (NSInteger)tableView:(UITableView *)tableView numberOfRowsInSection:(NSInteger)section 
{ 

    // Return the number of rows in the section. 
    return [self.LoadMenuItems count]; 
} 

- (UITableViewCell *)tableView:(UITableView *)tableView cellForRowAtIndexPath:(NSIndexPath *)indexPath 
{ 
    static NSString *CellIdentifier = @"menuSelection1"; 
    UITableViewCell *cell = [tableView dequeueReusableCellWithIdentifier:CellIdentifier]; 
    if (cell == nil) { 
     cell = [[UITableViewCell alloc] initWithStyle:UITableViewCellStyleDefault reuseIdentifier:CellIdentifier]; 
    } 


    AmbassadorInfoData * data = [self.LoadMenuItems objectAtIndex:indexPath.row]; 
    cell.textLabel.text = data.treeName; 

    return cell; 
} 

-(NSArray *)LoadMenuItems 
{ 


    NSMutableArray * menuData = [[NSMutableArray alloc] initWithCapacity:5]; 
    AmbassadorInfoData * data = [[AmbassadorInfoData alloc] init]; 

    data.treeName = @"Ambassador Info"; 
    data.treeDescription = @"This is temp data."; 
    NSString * file = [[NSBundle mainBundle] pathForResource:@"oak" ofType:@"jpg"]; 
    data.treePhoto = [UIImage imageWithContentsOfFile:file]; 

    [menuData addObject:data]; 
    data=nil; 

    data = [[AmbassadorInfoData alloc] init]; 
    data.treeName = @"AmbassadorInternalList"; 
    data.treeDescription = @"This is temp data.)."; 
    file = [[NSBundle mainBundle] pathForResource:@"DouglasFir" ofType:@"jpg"]; 
    data.treePhoto = [UIImage imageWithContentsOfFile:file]; 
    [menuData addObject:data]; 
    data=nil; 

    data = [[AmbassadorInfoData alloc] init]; 
    data.treeName = @"Text 3"; 
    data.treeDescription = @"This is temp data."; 
    file = [[NSBundle mainBundle] pathForResource:@"SugarMaple" ofType:@"jpg"]; 
    data.treePhoto = [UIImage imageWithContentsOfFile:file]; 
    [menuData addObject:data]; 
    data=nil; 

    data = [[AmbassadorInfoData alloc] init]; 
    data.treeName = @"Text 4"; 
    data.treeDescription = @"This is temp data."; 
    file = [[NSBundle mainBundle] pathForResource:@"RedMaple" ofType:@"jpg"]; 
    data.treePhoto = [UIImage imageWithContentsOfFile:file]; 
    [menuData addObject:data]; 
    data=nil; 

    data = [[AmbassadorInfoData alloc] init]; 
    data.treeName = @"Text 5"; 
    data.treeDescription = @"This is temp data."; 
    file = [[NSBundle mainBundle] pathForResource:@"Pine" ofType:@"jpg"]; 
    data.treePhoto = [UIImage imageWithContentsOfFile:file]; 
    [menuData addObject:data]; 
    menuItems = [[NSArray alloc] initWithArray:(NSArray *)menuData]; 
    data=nil; 

    return menuItems; 


} 




#pragma mark - Table view delegate 

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

    AmbassadorInfoData * selectedItem =(AmbassadorInfoData *)[self.menuItems objectAtIndex:[self.tableView indexPathForSelectedRow].row]; 


    detailObject = selectedItem; 

    [detailViewController setDetailItem:detailObject]; 


} 

@end 
+0

Я думаю, что вы не установили делегата –

+0

покажите все ваши методы, связанные с UITableView. @ Vinu1991, см. Его метод viewDidLoad. – Tirth

+0

Почему ваш [super viewDidLoad] закомментирован? вы сохраняете все свои методы UITableViewDelegate в том же классе (не KLViewController?) –

ответ

0

Попробуйте эти изменения:

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

    NSLog(@"TableView methods are called! problem is getting AmbassadorInfoData object") 

    AmbassadorInfoData * selectedItem =(AmbassadorInfoData *)[self.menuItems objectAtIndex:indexPath.row]; 

    if (!selectedItem) NSLog(@"Unable to get Ambassador object, check your menuItems"); 

    [self.detailViewController setDetailItem:selectedItem]; //notice "self." 


} 

также, раскомментируйте [супер viewDidLoad];

EDIT:

кажется, что вы используете код, который вы не понимаете, в этом случае я предлагаю изучить некоторые основы .... вот great site, который помог мне понять вещи довольно много раз

и это руководство от Apple: Table View Programming Guide

+0

Андрей спасибо за ответы ур. Можете ли вы PLS. объясните, что имеется в виду, когда вы говорите, что назначить контроллер вида переменной? В моем контроллере представления подробностей (KLViewController) у меня есть определенные действия, такие как печать описания и изображения. Я использую заполнители для изображения и текста в раскадровке. Проблема в том, что didSelectRowAtIndexPath не попадает. Контроллер MY leftside отображает имя правильно, как в cellForRowAtIndexPath. – user2021014

+0

сначала убедитесь, что метод вызван, выполнив приведенный выше код со всеми строками NSLog и ответьте здесь тем, что вы видите в журналах –

+0

Журналы пустые, и я также проверил, вызван ли метод. Метод не вызван. – user2021014

0

это может быть, что ваша программа застревает в длительной эксплуатации беговой из-за способа, который вы используете LoadMenuItems. Каждый раз, когда вызывается numberOfRowsInSection и cellForRowAtIndexPath, вы воссоздаете весь массив - это плохо. Вы должны вызвать LoadMenuItems один раз, возможно, в viewDidLoad, и как только вы создали этот массив, используйте его, а не вызов LoadMenuItems, когда вам нужно получить данные. Я не знаю, является ли это причиной вашей проблемы, но вы должны ее исправить и посмотреть, не изменилось ли это.

+0

Я попытался создать массив в viewDidLoad и вернуть элементы меню из LoadMenuItems. Теперь создание массива происходит только один раз, когда я отлаживаю. Даже тогда подробный вид в режиме разделения не отображается ... – user2021014

+0

@ user2021014, isSelectRowAtIndexPath все еще не называется? – rdelmar

+0

Привет, Rdelmar, я загрузил фрагменты кода по этой ссылке https://gist.github.com/anandfrancis/4993216 – user2021014

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