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

Приложение с множеством контроллеров - Программирование iOS/iPhone

Войти
Регистрация
Восстановить пароль
 
Рейтинг: Рейтинг темы: голосов - 10, средняя оценка - 4.90
spartans
0 / 0 / 0
Регистрация: 12.06.2014
Сообщений: 3
12.06.2014, 12:02     Приложение с множеством контроллеров #1
Здравствуйте!
Вообщем, как сделать так, чтобы в TableViewController по нажатию на определенную ячейку открывался определенный ViewController со своими картинками и текстом? Помогите пожалуйста! Я только месяц изучаю objectiv-c and xcode.
Пример мой на картинке.
Миниатюры
Приложение с множеством контроллеров  
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
12.06.2014, 12:02     Приложение с множеством контроллеров
Посмотрите здесь:

Objective-C Приложение табличного представления
Вход в приложение
Вылетает приложение из simulator
Приложение под iOS
Обновить приложение в AppStore
Приложение будильник
Сбилдить приложение
После регистрации реклама в сообщениях будет скрыта и будут доступны все возможности форума.
mercooliy
6 / 6 / 0
Регистрация: 12.05.2013
Сообщений: 130
12.06.2014, 14:28     Приложение с множеством контроллеров #2
Так как юзается таблвьюконтроллер то делегировать таблицу не надо (вроде).
Есть такое событие didSelectRowAtIndexPath (вызывается при нажатии на ячейку), а чтобы получить индекс ячейки вызываем что то наподобие такого [self.table indexPathForSelectedRow] оно возвращает индекс выбранной ячейки. Потом можно использовать либо if либо switсh и вызывать переход segue которые сделать в builderЕ вот примерно так
Objective-C
1
 [self performSegueWithIdentifier:@"название сигвея" sender:@"название сигвея"];
Есть вопросы пишите
noname_club
 Аватар для noname_club
102 / 90 / 9
Регистрация: 01.05.2013
Сообщений: 577
12.06.2014, 15:39     Приложение с множеством контроллеров #3
приложение без UITableViewController и без Segue перехода.

UIViewController+Macro.h
Objective-C
1
2
3
4
5
6
7
8
9
10
11
12
/*
 переходы между контроллерами,
 макро конструктор
*/
 
#ifndef Storyboard
 
#define Storyboard [UIStoryboard storyboardWithName:[[NSBundle mainBundle].infoDictionary objectForKey:@"UIMainStoryboardFile"] bundle:[NSBundle mainBundle]]
 
#define viewcontroller(name) [Storyboard instantiateViewControllerWithIdentifier:name]
 
#endif
Код табличного котроллера

c_start.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
#import "c_start.h"
#import "c_detail.h"
 
@implementation cell_ViewController
 
 
 
@end
 
#pragma mark -
 
@implementation c_start
 
- (void)viewDidLoad
{
    [super viewDidLoad];
    // Do any additional setup after loading the view, typically from a nib.
    
    _cells_data = @[
                    @{
                       @"title" : @"Кот",
                       @"detail" : @"Описание кота"
                       },
                    @{
                        @"title" : @"Собака",
                        @"detail" : @"Описание собаки"
                        },
                    @{
                        @"title" : @"Слон",
                        @"detail" : @"Описание слона"
                        },
                    @{
                        @"title" : @"Яблоко",
                        @"detail" : @"Описание Яблоко"
                        },
                    @{
                        @"title" : @"Карандаш",
                        @"detail" : @"Описание Карандаш"
                        },
                    @{
                        @"title" : @"Лампа",
                        @"detail" : @"Описание Лампа"
                        },
                    ];
    
    // настройка таблицы
    
    _table.delegate = self;
    _table.dataSource = self;
    
}
 
-(void)dealloc {
    _cells_data = nil;
}
 
#pragma mark TABLE
 
-(UITableViewCell *)tableView:(UITableView *)tableView cellForRowAtIndexPath:(NSIndexPath *)indexPath {
   
    cell_ViewController * cell = [tableView dequeueReusableCellWithIdentifier:@"cell"];
    
    cell.data = _cells_data[indexPath.row];
    cell.title.text = cell.data[@"title"];
    
    cell.backgroundColor = [UIColor clearColor];
    
    return cell;
}
 
-(NSInteger)numberOfSectionsInTableView:(UITableView *)tableView {
    return 1;
}
 
-(NSInteger)tableView:(UITableView *)tableView numberOfRowsInSection:(NSInteger)section {
    return [_cells_data count];
}
 
-(void)tableView:(UITableView *)tableView didSelectRowAtIndexPath:(NSIndexPath *)indexPath {
    NSDictionary * data = _cells_data[indexPath.row];
    
    c_detail * vc = viewcontroller(@"c_detail"); // << макро-конструктор
    vc.selected_data = data; // << передача данных в котроллер
    
    [self.navigationController pushViewController:vc animated:YES]; // >>
}
 
-(CGFloat)tableView:(UITableView *)tableView heightForRowAtIndexPath:(NSIndexPath *)indexPath {
    return 44;
}
 
@end
Код детального котроллера

c_detail.m
Objective-C
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
#import "c_detail.h"
 
@implementation c_detail
 
- (void)viewDidLoad
{
    [super viewDidLoad];
    // Do any additional setup after loading the view.
    
    if (_selected_data) {
        self.navigationItem.title = _selected_data[@"title"];
        _textview.text = _selected_data[@"detail"];
    }
}
 
@end
Приложение с множеством контроллеров
Вложения
Тип файла: zip test_hello_aplication.zip (41.4 Кб, 13 просмотров)
spartans
0 / 0 / 0
Регистрация: 12.06.2014
Сообщений: 3
12.06.2014, 16:09  [ТС]     Приложение с множеством контроллеров #4
Спасибо Noname отличный пример! Буду разбирать его! Вы мне только подскажите кодом как вызывать разные ViewController например по нажатию на cell или хотя бы button, где допустим 5 штук View и я выбираю третий из них.
Немного догадываюсь, что как-то так self.ViewController3;
noname_club
 Аватар для noname_club
102 / 90 / 9
Регистрация: 01.05.2013
Сообщений: 577
12.06.2014, 23:21     Приложение с множеством контроллеров #5
Вы мне только подскажите кодом как вызывать разные ViewController
1) не вызывать, а создавать и переходить
2) если контретно про мой промер то вот этих сторках собственно и происходит переход

Objective-C
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
// @"c_detail" это строка
// @"c_detail" соотвествует ID котроллера на StroryBoard
// то что @"c_detail" совпадает с именем класса котроллера это просто совпадение намеренно мной сделанное.
// соотвественно ЛЮБОМУ контроллеру на StroryBoard можно дать свой ID и создать его через эту контрукцию
// 
// если смущает использование макроса, то можете его раскрыть и использовать без макроса.
c_detail * vc = viewcontroller(@"c_detail"); 
 
// в переменной vc теперь лежит НОВЫЙ экземляр контроллера.
// перехода еще нет, но какието данные уже можно передать
 
vc.selected_data = data; // << передача данных в котроллер
    
// переход осуществляется тут
// самым стандартным образом
 [self.navigationController pushViewController:vc animated:YES];
spartans
0 / 0 / 0
Регистрация: 12.06.2014
Сообщений: 3
13.06.2014, 00:19  [ТС]     Приложение с множеством контроллеров #6
Спасибо, спасибо, понятно! Но, я сделал все что хотел без единой строки кода) С помощью button) Целую неделю не получалось, а тут глянул скачанный урок и там оказалось то что нужно. Просто надо выбрать событие на переход - modal.
zulkis
 Аватар для zulkis
681 / 608 / 38
Регистрация: 13.01.2011
Сообщений: 1,724
13.06.2014, 11:25     Приложение с множеством контроллеров #7
spartans, пример ужасен как с точки зрения стандартов кодирования, так и с точки зрения "оберток", которыми noname_club злоупотребляет.
Цитата Сообщение от noname_club Посмотреть сообщение
@implementation c_start
Цитата Сообщение от noname_club Посмотреть сообщение
@implementation cell_ViewController
Это издевательсво какое-то.
noname_club
 Аватар для noname_club
102 / 90 / 9
Регистрация: 01.05.2013
Сообщений: 577
13.06.2014, 14:05     Приложение с множеством контроллеров #8
cell_ViewController
это правда плохое название.
просто пример писался бытро

а если подумать то название у ячейки должно быть cell_start или чтото типа того. префикс cell указывает на то что это ячейка, суффикс start на принадлежность контроллеру c_start.

так и с точки зрения "оберток", которыми noname_club злоупотребляет.
несчaстный макрос призванный хоть както приблизить сторибоард и создать из него контроллер.

c_start
это один их способов объединить названия классов контроллеров под префикс c_
noname_club
 Аватар для noname_club
102 / 90 / 9
Регистрация: 01.05.2013
Сообщений: 577
13.06.2014, 14:10     Приложение с множеством контроллеров #9
пересобранный пример под название ячейки cell_start
Вложения
Тип файла: zip test_hello_aplication.zip (41.5 Кб, 10 просмотров)
PiXcell
 Аватар для PiXcell
2 / 2 / 0
Регистрация: 10.03.2014
Сообщений: 39
27.07.2014, 23:06     Приложение с множеством контроллеров #10
А зачем городить тучу разных вивконтроллеров под разных котов? а если котов не 3 а 30?
Как вариант тэблвив в переходом на единственный вивконтроллер который создается именно под определенного кота, можно и кнопку с описанием в нем сделать, чтоб текст написать на отдельном вивконтроллере который показавается как notes
Сейчас посмотрю у себя, было чтото подобное из уроков...
...
вот ссылка на урок, надеюсь поможет. Сюда не смог выложить так как размер более 10мб (видеоуроки), в папке так же английская транскрипция звукового ряда в уроках с гуглпереводом (перевод корявый, но он мне был нужен для редких не понятных мне слов чтоб не лезть в словарь)

https://yadi.sk/d/_ICUzJ9hXzee5

приложил исходник того что получается по уроку:
Вложения
Тип файла: zip PhotoViewer_finished.zip (5.46 Мб, 13 просмотров)
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
30.07.2014, 17:46     Приложение с множеством контроллеров
Еще ссылки по теме:

Многоэкранное приложение
Мультиязычное приложение
Делаем приложение на сайт
Консольное приложение OSX Objective-C
Приложение на IOS

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

Или воспользуйтесь поиском по форуму:
lexus_ilia
 Аватар для lexus_ilia
3045 / 920 / 34
Регистрация: 24.09.2008
Сообщений: 1,530
30.07.2014, 17:46     Приложение с множеством контроллеров #11
spartans, а вы когда сделали "без единой строки кода", вы задали переходы в сториборде и сделали ячейки статическими? Такой подход не будет работать с разным количеством данных (например при получении данных с сервера). Поэтому как бы для улучшения знаний советую попрактиковаться в загрузке контроллеров со сториборда, с xib файла и в переходе на эти контроллеры. А чтобы знать что куда должно переходить сделайте кастомную ячейку, в которой сохраните ссылку на ваши данные (для того, чтобы знать откуда куда переходить и также для того, чтобы в методе didSelectRowAtIndexPath: вам не надо было брать индекс ячейки и городить огород).
Yandex
Объявления
30.07.2014, 17:46     Приложение с множеством контроллеров
Ответ Создать тему
Опции темы

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