Форум программистов, компьютерный форум, киберфорум
Наши страницы
Программирование iOS/iPhone
Войти
Регистрация
Восстановить пароль
 
Рейтинг 4.88/8: Рейтинг темы: голосов - 8, средняя оценка - 4.88
spartans
0 / 0 / 0
Регистрация: 12.06.2014
Сообщений: 3
1

Приложение с множеством контроллеров

12.06.2014, 12:02. Просмотров 1513. Ответов 10
Метки нет (Все метки)

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

Как создать приложение с множеством панелей?
Здравствуйте, я раньше программировал в основном в eclipse на java на...

Построить биекцию между множеством N и множеством чётных чисел
Друзья, нужна помощь в построении биекции, как это сделать? :scratch:

Тестирование контроллеров
Добрый день! Например, есть action MyAction, который возвращает ViewResult,...

Конфликт контроллеров
Здравствуйте, продолжаю вас мучить своими нубскими вопросами относительно...

Сеть контроллеров
Всем трям. Есть такой вопрос. Есть несколько устройств и блок управления....

10
mercooliy
6 / 6 / 1
Регистрация: 12.05.2013
Сообщений: 153
12.06.2014, 14:28 2
Так как юзается таблвьюконтроллер то делегировать таблицу не надо (вроде).
Есть такое событие didSelectRowAtIndexPath (вызывается при нажатии на ячейку), а чтобы получить индекс ячейки вызываем что то наподобие такого [self.table indexPathForSelectedRow] оно возвращает индекс выбранной ячейки. Потом можно использовать либо if либо switсh и вызывать переход segue которые сделать в builderЕ вот примерно так
Objective-C
1
 [self performSegueWithIdentifier:@"название сигвея" sender:@"название сигвея"];
Есть вопросы пишите
1
noname_club
107 / 98 / 12
Регистрация: 01.05.2013
Сообщений: 603
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
Приложение с множеством контроллеров
1
Вложения
Тип файла: zip test_hello_aplication.zip (41.4 Кб, 14 просмотров)
spartans
0 / 0 / 0
Регистрация: 12.06.2014
Сообщений: 3
12.06.2014, 16:09  [ТС] 4
Спасибо Noname отличный пример! Буду разбирать его! Вы мне только подскажите кодом как вызывать разные ViewController например по нажатию на cell или хотя бы button, где допустим 5 штук View и я выбираю третий из них.
Немного догадываюсь, что как-то так self.ViewController3;
0
noname_club
107 / 98 / 12
Регистрация: 01.05.2013
Сообщений: 603
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];
1
spartans
0 / 0 / 0
Регистрация: 12.06.2014
Сообщений: 3
13.06.2014, 00:19  [ТС] 6
Спасибо, спасибо, понятно! Но, я сделал все что хотел без единой строки кода) С помощью button) Целую неделю не получалось, а тут глянул скачанный урок и там оказалось то что нужно. Просто надо выбрать событие на переход - modal.
0
zulkis
684 / 611 / 43
Регистрация: 13.01.2011
Сообщений: 1,724
13.06.2014, 11:25 7
spartans, пример ужасен как с точки зрения стандартов кодирования, так и с точки зрения "оберток", которыми noname_club злоупотребляет.
Цитата Сообщение от noname_club Посмотреть сообщение
@implementation c_start
Цитата Сообщение от noname_club Посмотреть сообщение
@implementation cell_ViewController
Это издевательсво какое-то.
0
noname_club
107 / 98 / 12
Регистрация: 01.05.2013
Сообщений: 603
13.06.2014, 14:05 8
cell_ViewController
это правда плохое название.
просто пример писался бытро

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

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

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

https://yadi.sk/d/_ICUzJ9hXzee5

приложил исходник того что получается по уроку:
1
Вложения
Тип файла: zip PhotoViewer_finished.zip (5.46 Мб, 14 просмотров)
lexus_ilia
3050 / 710 / 69
Регистрация: 24.09.2008
Сообщений: 1,531
30.07.2014, 17:46 11
spartans, а вы когда сделали "без единой строки кода", вы задали переходы в сториборде и сделали ячейки статическими? Такой подход не будет работать с разным количеством данных (например при получении данных с сервера). Поэтому как бы для улучшения знаний советую попрактиковаться в загрузке контроллеров со сториборда, с xib файла и в переходе на эти контроллеры. А чтобы знать что куда должно переходить сделайте кастомную ячейку, в которой сохраните ссылку на ваши данные (для того, чтобы знать откуда куда переходить и также для того, чтобы в методе didSelectRowAtIndexPath: вам не надо было брать индекс ячейки и городить огород).
0
30.07.2014, 17:46
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
30.07.2014, 17:46

Программирование контроллеров
Подскажите, плз, где можно найти инфу по программированию контроллеров (напр....

Количество контроллеров
Я новичок в Android, не могу найти как получить количество кнопок в гугле...

Пересадка контроллеров HDD
Всем доброго времени суток. Скопилось у меня два десятка ноутбучных хардов,...


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

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

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