Форум программистов, компьютерный форум, киберфорум
Наши страницы

Objective-C

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

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

28.11.2011, 13:10. Просмотров 1495. Ответов 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 поэтому то что в квадратных скобках это вызов функции, двоеточия означают параметры.
можно ли как нить проще сделать эти условия?
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
28.11.2011, 13:10
Здравствуйте! Я подобрал для вас темы с ответами на вопрос Рефакторинг кода. (Objective-C):

Рефакторинг кода - Java SE
Добрый день. Такой вопрос: Есть базовый(abstract) класс Base, от него унаследовано несколько классов Child1, Child2, Child3.. Есть...

Рефакторинг кода - JavaScript
Есть 2 метода очень похожих друг на друга function convertMeterToKilometr(event) { var value = event.target.value; if...

Рефакторинг кода - C#
Вообщем изучаю в C# методы и массивы (практикуюсь). Программировать, то есть писать программный код правильно толком не умею, не знаю как...

Рефакторинг кода - C++
Нужно сделать рефакторинг большого корпоративного проекта (а лучше для нескольких сразу). Для начала хотелось бы посмотреть наличие...

Рефакторинг кода - C#
Здравствуйте, есть функция private void draw() { if (color2_bt0.IsChecked == true) { drawingBrush = Brushes.Black; ...

Рефакторинг кода на delphi - Delphi БД
Добрый день товарищи Делфисты. Начал недавно изучать Delphi по этому особо не ругайте:) Вообще дело в следующем. Пишу на Delphi...

1
zulkis
683 / 610 / 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, то тут нужно видеть ситуацию в целом, а не маленький клочок программы.
0
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
28.11.2011, 17:03
Привет! Вот еще темы с ответами:

Оптимизация, рефакторинг кода - C++
Программа написанная для лаб.работы по предмету &quot;Теория Графов&quot;. Программа с задачей перейти из одного способа задания(мб другое слово)...

Сделать рефакторинг кода - PHP
Здравствуйте. Помогите сделать рефакторинг кода: &lt;?php $dest = $_POST; $result = $_POST; $output = &quot;&quot;; if ($dest == 'file')...

Рефакторинг кода задачки - C++
Здравствуйте! Скажите пожалуйста, как можно отрефакторить следующую программу ? (без STL и ООП) #include &lt;iostream&gt; using...

Рефакторинг программного кода - Delphi
добрый вечер, уважаемые программисты. помогите, пожалуйста. выполнить задания. задание: 1) создать небольшое приложение, в котором...


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

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

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