Форум программистов, компьютерный форум, киберфорум
Наши страницы
Программирование iOS/iPhone
Войти
Регистрация
Восстановить пароль
 
Рейтинг 5.00/3: Рейтинг темы: голосов - 3, средняя оценка - 5.00
Veyron
106 / 106 / 9
Регистрация: 02.06.2009
Сообщений: 578
1

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

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

Есть два класса - 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
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
05.07.2013, 00:10
Ответы с готовыми решениями:

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

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

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

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

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

4
mobidevelop
182 / 182 / 3
Регистрация: 10.01.2013
Сообщений: 596
05.07.2013, 09:42 2
Я бы в первую очередь у CategoryController во viewDidLoad написал был
Objective-C
1
[self.tableView reloadData];
Но не уверен, что в этом проблема. Дебажиться надо.
0
Veyron
106 / 106 / 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
Pro2005
44 / 44 / 3
Регистрация: 27.05.2013
Сообщений: 163
05.07.2013, 15:33 4
Дока вам в помощь
http://developer.apple.com/library/i...06942-CH3-SW10

Я думаю вы хотели исп tableView:didSelectRowAtIndexPath:... но по ошибке взялись за didDeselectRowAtIndexPath
1
Veyron
106 / 106 / 9
Регистрация: 02.06.2009
Сообщений: 578
05.07.2013, 15:44  [ТС] 5
Pro2005, спасибо большое, в этом и был косяк! :-D Хз где я глаза потерял :-D
0
05.07.2013, 15:44
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
05.07.2013, 15:44

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

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

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


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

Или воспользуйтесь поиском по форуму:
5
Ответ Создать тему
Опции темы

КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2018, vBulletin Solutions, Inc.
Рейтинг@Mail.ru