Форум программистов, компьютерный форум CyberForum.ru

Программирование iOS/iPhone

Войти
Регистрация
Восстановить пароль
 
Veyron
106 / 106 / 4
Регистрация: 02.06.2009
Сообщений: 579
#1

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

05.07.2013, 00:10. Просмотров 491. Ответов 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
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
05.07.2013, 00:10     Не происходит переход на следующий ListViewController по первому касанию
Посмотрите здесь:
Objective-C Не происходит viewdidload
C# Переход в следующий TextBox
Переход на следующий уровень
ActionScript Переход на следующий кадр
ActionScript Переход на следующий кадр
Переход на следующий трек в MediaPlayer C++ Builder
Переход на следующий элемент управления Visual Basic
ActionScript AS 3.0 Переход на следующий кадр без скриптов
Сделать переход на следующий учебный год Delphi БД
Delphi Переход на следующий вопрос в программе тестирования
Sql запрос: переход на следующий учебный год MS Access
VBA После нажатия ENTER переход на следующий textbox

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

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

Я думаю вы хотели исп tableView:didSelectRowAtIndexPath:... но по ошибке взялись за didDeselectRowAtIndexPath
Veyron
106 / 106 / 4
Регистрация: 02.06.2009
Сообщений: 579
05.07.2013, 15:44  [ТС]     Не происходит переход на следующий ListViewController по первому касанию #5
Pro2005, спасибо большое, в этом и был косяк! :-D Хз где я глаза потерял :-D
Yandex
Объявления
05.07.2013, 15:44     Не происходит переход на следующий ListViewController по первому касанию
Ответ Создать тему
Опции темы

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