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

Objective-C

Войти
Регистрация
Восстановить пароль
 
Рейтинг: Рейтинг темы: голосов - 12, средняя оценка - 4.75
Dangelo
7 / 7 / 1
Регистрация: 28.11.2010
Сообщений: 57
#1

Рефакторинг кода. - Objective-C

28.11.2011, 13:10. Просмотров 1428. Ответов 1
Метки нет (Все метки)

Доброго всем дня. помогите упростить кусок кода с if.

Первая секция - две строки
При нажатии на каждую - раскрываются в список, при повторном нажатии список закрывается.
При повторном нажатии - список сворачивается обратно в одну ячейку.
При нажатии на ячейке списка меняется заголовок родительской ячейки

этот кусок служит отображением таблицы в соответствии со статусами нажатий
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
 //Для первой секции
    if (indexPath.section == 0) 
    {
        //Отображаем два свернутых списка
        if ((isShowingList==NO)&&(isShowingList2==NO)) 
        {
            if(indexPath.row==0) 
            {
                cell.textLabel.text = [dataForSection01 objectAtIndex: selectedValueIndex];
            }
            else 
            {
                cell.textLabel.text = [dataForSection02 objectAtIndex:selectedValueIndex2];
            }
        }
        //Отображаем первый список развернутый а второй свернутый
        if ((isShowingList==YES) && (isShowingList2==NO)) 
        {
            if (indexPath.row == 0) cell.textLabel.text=[dataForSection01 objectAtIndex:selectedValueIndex];
            else if (indexPath.row <= sizeArray) 
            {
                cell.textLabel.text = [dataForSection01 objectAtIndex:indexPath.row-1];
            }
            else 
            {
                cell.textLabel.text = [dataForSection02 objectAtIndex:selectedValueIndex2];
            }
        }
        //Отображаем второй список развернутый а первый свернутый
        if ((isShowingList==NO) && (isShowingList2==YES)) 
        {
            if (indexPath.row == 0) 
            {
                cell.textLabel.text = [dataForSection01 objectAtIndex:selectedValueIndex];
            }
            else if (indexPath.row==1) 
            {
                cell.textLabel.text= [dataForSection02 objectAtIndex:selectedValueIndex2];
            }
            else 
            {
                    cell.textLabel.text = [dataForSection02 objectAtIndex:indexPath.row-2];
            }
        }
        //оба списка развернуты
        if ((isShowingList == YES) && (isShowingList2==YES)) 
        {
            if (indexPath.row == 0) 
            {
                cell.textLabel.text= [dataForSection01 objectAtIndex:selectedValueIndex];
            } else if (indexPath.row <= sizeArray) 
            {
                cell.textLabel.text = [dataForSection01 objectAtIndex:indexPath.row-1];
            }
            else if (indexPath.row==sizeArray+1) 
            {
                cell.textLabel.text = [dataForSection02 objectAtIndex:selectedValueIndex2];
            }
            else 
            {
                cell.textLabel.text = [dataForSection02 objectAtIndex:indexPath.row - (sizeArray+2)];
            }
        }
    }
кусок на Objective-C поэтому то что в квадратных скобках это вызов функции, двоеточия означают параметры.
можно ли как нить проще сделать эти условия?
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
28.11.2011, 13:10     Рефакторинг кода.
Посмотрите здесь:

Objective-C Парсинг XML кода
Objective-C Парсинг HTML кода
C# Рефакторинг кода
Проектирование кода Objective-C
Рефакторинг кода C++
Objective-C Что значат собака (@) и процент (%) в тексте кода
Java SE Рефакторинг кода
Objective-C Добавление кода отправки GET запроса в AppDelegate.m
Objective-C О написании чистого кода
Objective-C Возникла сложность в реализации кода. Начинающий в Objective C
JavaScript Рефакторинг кода

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

Или воспользуйтесь поиском по форуму:
После регистрации реклама в сообщениях будет скрыта и будут доступны все возможности форума.
zulkis
681 / 608 / 38
Регистрация: 13.01.2011
Сообщений: 1,724
28.11.2011, 17:03     Рефакторинг кода. #2
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
 //Для первой секции
    if (indexPath.section == 0) 
    {
        //Отображаем два свернутых списка
    //!!!: непонятно для чего проверки флагов на YES\NO
        if (!isShowingList && !isShowingList2) {
        cell.textLabel.text = indexPath.row != 0 ? [dataForSection02 objectAtIndex:selectedValueIndex2] : [dataForSection01 objectAtIndex:selectedValueIndex];
        }
        //Отображаем первый список развернутый а второй свернутый
        if (isShowingList && !isShowingList2)
        {
            if (indexPath.row == 0) { //Скобки обязательно, ибо легко запутаться, тут как я понимаю у вас штучка для 0го UITableViewCell'a
        cell.textLabel.text = [dataForSection01 objectAtIndex:selectedValueIndex];
        } else if (indexPath.row <= sizeArray) { //здесь соответственно остальные
                cell.textLabel.text = [dataForSection01 objectAtIndex:indexPath.row-1];
            } else { //А это завершающий получается
                cell.textLabel.text = [dataForSection02 objectAtIndex:selectedValueIndex2];
            }
        }
        //Отображаем второй список развернутый а первый свернутый
        if (!isShowingList && isShowingList2) 
        {
            if (indexPath.row == 0) {
                cell.textLabel.text = [dataForSection01 objectAtIndex:selectedValueIndex];
            } else if (indexPath.row==1) {
                cell.textLabel.text = [dataForSection02 objectAtIndex:selectedValueIndex2];
            } else {
                cell.textLabel.text = [dataForSection02 objectAtIndex:indexPath.row-2]; // -2 это конечно очень понятно :(
            }
        }
        //оба списка развернуты
        if (isShowingList && isShowingList2) 
        {
            if (indexPath.row == 0) {
                cell.textLabel.text= [dataForSection01 objectAtIndex:selectedValueIndex];
            } else if (indexPath.row <= sizeArray) {
                cell.textLabel.text = [dataForSection01 objectAtIndex:indexPath.row-1];
            } else if (indexPath.row==sizeArray+1) {
                cell.textLabel.text = [dataForSection02 objectAtIndex:selectedValueIndex2];
            } else {
                cell.textLabel.text = [dataForSection02 objectAtIndex:indexPath.row - (sizeArray+2)];
            }
        }
    }
Сейчас будем дальше улучшать, если поясните что нужно сделать то в итоге? Введем отдельные методы. И скажите пожалуйста, где вы обрабатываете данные проверки? Поди в tableView:cellForRowAtIndexPath: ?
Если вы хотите добиться именно такого эффекта при нажатии на cell, то тут нужно видеть ситуацию в целом, а не маленький клочок программы.
Yandex
Объявления
28.11.2011, 17:03     Рефакторинг кода.
Ответ Создать тему
Опции темы

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