Форум программистов, компьютерный форум, киберфорум
Программирование iOS/iPhone
Войти
Регистрация
Восстановить пароль
Карта форума Темы раздела Блоги Сообщество Поиск Заказать работу  
 
Рейтинг 4.75/4: Рейтинг темы: голосов - 4, средняя оценка - 4.75
107 / 107 / 9
Регистрация: 02.06.2009
Сообщений: 578
1

Не происходит переход на следующий ListViewController по первому касанию

05.07.2013, 00:10. Показов 687. Ответов 4
Метки нет (Все метки)

Author24 — интернет-сервис помощи студентам
Есть два класса - ClassViewController и CategoryViewController. Первый отображает список классов, а второй - категории для каждого класса. Чтобы знать, какой класс был нажат - в CategoryViewController передается имя класса, и по нему выбираются нужные категории. Но вот загвоздка: к примеру, если я тыкаю на "Класс 1", то ничего не происходит. Затем, когда я тыкаю второй раз - происходит переход на второй контроллер, но со значением "Класс 1", то есть как будто я один раз нажал на первый объект. Как такое поведение можно исправить на нормальное? Заранее спасибо.

PS: внизу - файлы этих классов.

PPS: сильно не пинайте - я в программировании под iOS и вообще в objective-c новичок. Жизнь заставила :-)

ClassViewController.h:
Objective-C
1
2
3
4
5
6
7
8
9
10
11
12
13
14
#import <UIKit/UIKit.h>
 
@class Group;
@class ClassTableViewCell;
@class Menu;
 
@interface ClassViewController : UITableViewController
 
@property (nonatomic, strong) Menu *mainMenu;
 
-(void)showClass:(Group *)group animated:(BOOL)animated;
-(void)configureCell:(ClassTableViewCell *)cell atIndexPath:(NSIndexPath *)indexPath;
 
@end
ClassViewController.m:
Objective-C
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
#import "ClassViewController.h"
 
#import "Menu.h"
#import "ClassTableViewCell.h"
#import "CategoryViewController.h"
 
@implementation ClassViewController
 
- (id)initWithStyle:(UITableViewStyle)style
{
    self = [super initWithStyle:style];
    if (self) {
        
    }
    return self;
}
 
- (void)viewDidLoad
{
    [super viewDidLoad];
    
    self.title = @"Меню";
    self.tableView.rowHeight = 44.0;
    self.mainMenu = [[Menu alloc] init];
    
    // Uncomment the following line to preserve selection between presentations.
    // self.clearsSelectionOnViewWillAppear = NO;
 
    // Uncomment the following line to display an Edit button in the navigation bar for this view controller.
    // self.navigationItem.rightBarButtonItem = self.editButtonItem;
}
 
 
- (BOOL)shouldAutorotateToInterfaceOrientation:(UIInterfaceOrientation)interfaceOrientation {
    // Support all orientations except upside down
    return (interfaceOrientation != UIInterfaceOrientationPortraitUpsideDown);
}
 
-(void)showClass:(Group *)group animated:(BOOL)animated
{
    CategoryViewController *categoryViewController = [[CategoryViewController alloc] initWithStyle:UITableViewStyleGrouped];
    
    categoryViewController.group = group;
    categoryViewController.mainMenu = self.mainMenu;
    
    [self.navigationController pushViewController:categoryViewController animated:YES];
    [categoryViewController release];
}
 
- (void)didReceiveMemoryWarning
{
    [super didReceiveMemoryWarning];
    // Dispose of any resources that can be recreated.
}
 
#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 _mainMenu.classes.count;
}
 
 
- (UITableViewCell *)tableView:(UITableView *)tableView cellForRowAtIndexPath:(NSIndexPath *)indexPath
{
    static NSString *CellIdentifier = @"ClassTableViewCellIdentifier";
    ClassTableViewCell *cell = [tableView dequeueReusableCellWithIdentifier:CellIdentifier /*forIndexPath:indexPath*/];
    
    if (cell == nil)
    {
        cell = [[[ClassTableViewCell alloc] initWithStyle:UITableViewCellStyleDefault reuseIdentifier:CellIdentifier] autorelease];
        cell.accessoryType = UITableViewCellAccessoryDisclosureIndicator;
    }
    
    [self configureCell:cell atIndexPath:indexPath];
    
    return cell;
}
 
 
-(void)configureCell:(ClassTableViewCell *)cell atIndexPath:(NSIndexPath *)indexPath
{
    Group * group = [_mainMenu.classes objectAtIndex:[indexPath row]];
    cell.group = group;
}
 
-(void)tableView:(UITableView *)tableView didDeselectRowAtIndexPath:(NSIndexPath *)indexPath
{
    Group *group = (Group *)[_mainMenu.classes objectAtIndex:[indexPath row]];
    
    [self showClass:group animated:YES];
}
 
-(void)dealloc
{
    [_mainMenu release];
 
    [super dealloc];
}
 
@end
CategoryViewController.h:
Objective-C
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
#import <UIKit/UIKit.h>
 
@class Menu;
@class Category;
@class CategoryTableViewCell;
@class Group;
 
@interface CategoryViewController : UITableViewController <UINavigationControllerDelegate>
 
@property (nonatomic, retain) Group *group;
@property (nonatomic, retain) Menu *mainMenu;
 
 
-(void)showCategory:(Category *)category animated:(BOOL)animated;
-(void)configureCell:(CategoryTableViewCell *)cell atIndexPath:(NSIndexPath *)indexPath;
 
@end
CategoryViewController.m:
Objective-C
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
#import "CategoryViewController.h"
 
#import "MenuViewController.h"
#import "Menu.h"
#import "CategoryTableViewCell.h"
#import "ClassTableViewCell.h"
#import "ClassViewController.h"
#import "Group.h"
#import "Category.h"
 
@interface CategoryViewController ()
 
@end
 
@implementation CategoryViewController
 
- (id)initWithStyle:(UITableViewStyle)style
{
    self = [super initWithStyle:style];
    if (self) {
        // Custom initialization
    }
    return self;
}
 
- (void)viewDidLoad
{
    [super viewDidLoad];
    
    self.title = @"Категории";
    self.tableView.rowHeight = 44.0;
}
 
- (BOOL)shouldAutorotateToInterfaceOrientation:(UIInterfaceOrientation)interfaceOrientation
{
    return (interfaceOrientation != UIInterfaceOrientationPortraitUpsideDown);
}
 
 
-(void)showCategory:(Category *)category animated:(BOOL)animated
{
    MenuViewController *menuViewController = [[MenuViewController alloc] initWithStyle:UITableViewStyleGrouped];
    
    menuViewController.category = category;
    menuViewController.mainMenu = self.mainMenu;
    
    [self.navigationController pushViewController:menuViewController animated:animated];
    [menuViewController release];
}
 
- (void)didReceiveMemoryWarning
{
    [super didReceiveMemoryWarning];
    // Dispose of any resources that can be recreated.
}
 
#pragma mark - Table view data source
 
- (NSInteger)numberOfSectionsInTableView:(UITableView *)tableView
{
    return 1;
}
 
- (NSInteger)tableView:(UITableView *)tableView numberOfRowsInSection:(NSInteger)section
{
    return [[_mainMenu getCategoriesByClass:[self.group name]] count];
}
 
 
- (UITableViewCell *)tableView:(UITableView *)tableView cellForRowAtIndexPath:(NSIndexPath *)indexPath
{
    static NSString *CellIdentifier = @"CategoryTableViewCellIdentifier";
    CategoryTableViewCell *cell = [tableView dequeueReusableCellWithIdentifier:CellIdentifier];
    
    if (cell == nil)
    {
        cell = [[[CategoryTableViewCell alloc] initWithStyle:UITableViewCellStyleDefault reuseIdentifier:CellIdentifier] autorelease];
        cell.accessoryType = UITableViewCellAccessoryDisclosureIndicator;
    }
    
    [self configureCell:cell atIndexPath:indexPath];
    
    return cell;
}
 
 
-(void)configureCell:(CategoryTableViewCell *)cell atIndexPath:(NSIndexPath *)indexPath
{
    Category *category = [[_mainMenu getCategoriesByClass:_group.name] objectAtIndex:[indexPath row]];
    cell.category = category;
}
 
 
 
#pragma mark - Table view delegate
 
- (void)tableView:(UITableView *)tableView didSelectRowAtIndexPath:(NSIndexPath *)indexPath
{
    
    Category *category = (Category *)[[_mainMenu getCategoriesByClass:_group.name] objectAtIndex:[indexPath row]];
    
    [self showCategory:category animated:YES];
}
 
-(void)dealloc
{
    [_group release];
    [super dealloc];
}
 
@end
0
Programming
Эксперт
94731 / 64177 / 26122
Регистрация: 12.04.2006
Сообщений: 116,782
05.07.2013, 00:10
Ответы с готовыми решениями:

Переход на следующий уровень
Добрый день! Подскажите как решить следующую задачу. создаю игру из нескольких уровней. Игрок...

Переход в следующий TextBox
Привет, всем. Подскажите как при событие, нажатия Enter в активном TextBox(Предположим...

Переход на следующий кадр
Ребят, подскажите, как сделать переход на следующий кадр, т.е. Что бы кнопки &quot;назад&quot; и &quot;далее&quot;...

Переход на следующий кадр
Здравствуйте, товарищи программисты! Я новичок, возникла проблема. По нажатию на кнопку должно...

4
182 / 182 / 3
Регистрация: 10.01.2013
Сообщений: 596
05.07.2013, 09:42 2
Я бы в первую очередь у CategoryController во viewDidLoad написал был
Objective-C
1
[self.tableView reloadData];
Но не уверен, что в этом проблема. Дебажиться надо.
0
107 / 107 / 9
Регистрация: 02.06.2009
Сообщений: 578
05.07.2013, 11:01  [ТС] 3
mobidevelop, не изменилось ничего :-(
По поводу отладки: я ставил брейкпоинт на строку:
Objective-C
1
-(void)tableView:(UITableView *)tableView didDeselectRowAtIndexPath:(NSIndexPath *)indexPath
В файле ClassViewController.m, и она срабатывала как раз на втором нажатии, со значением предыдущей ячейки. На первом "тыке" точка останова не срабатывала. Или может я неправильно отлаживаю под Мас?

Добавлено через 37 секунд
mobidevelop, не изменилось ничего :-(
По поводу отладки: я ставил брейкпоинт на строку:
Objective-C
1
-(void)tableView:(UITableView *)tableView didDeselectRowAtIndexPath:(NSIndexPath *)indexPath
В файле ClassViewController.m, и она срабатывала как раз на втором нажатии, со значением предыдущей ячейки. На первом "тыке" точка останова не срабатывала. Или может я неправильно отлаживаю под Мас?
0
44 / 44 / 3
Регистрация: 27.05.2013
Сообщений: 163
05.07.2013, 15:33 4
Дока вам в помощь
http://developer.apple.com/lib... 2-CH3-SW10

Я думаю вы хотели исп tableView:didSelectRowAtIndexPath:... но по ошибке взялись за didDeselectRowAtIndexPath
1
107 / 107 / 9
Регистрация: 02.06.2009
Сообщений: 578
05.07.2013, 15:44  [ТС] 5
Pro2005, спасибо большое, в этом и был косяк! :-D Хз где я глаза потерял :-D
0
05.07.2013, 15:44
IT_Exp
Эксперт
87844 / 49110 / 22898
Регистрация: 17.06.2006
Сообщений: 92,604
05.07.2013, 15:44
Помогаю со студенческими работами здесь

Переход на следующий трек в MediaPlayer
Привет всем! Буду очень благодарен, если кто откликнется. В папке с проектом есть два аудиофайла:...

Переход на следующий элемент управления
может ест какая процедура перехода на следующий элемент управления (вроде как TAB программно...

Сделать переход на следующий учебный год
Как сделать переход на следующий учебный год(чтобы к примеру 2 класс стал 3 и так далее, а 11 чтоб...

Переход на следующий кадр без скриптов
Здраствуйте, Помогите пожалуйста gotoAndStop(2); как отключить работу скрипта? Что зачем как,...


Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
5
Ответ Создать тему
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2024, CyberForum.ru