UITableView: я хочу использовать подход, в котором легко изменить разделы и строки (добавить, удалить). - PullRequest
0 голосов
/ 12 января 2012

Наше приложение менялось каждый месяц. Очень трудно изменить разделы и строки (добавить, удалить). Мне нужно сканировать каждый метод UITableViewDelegate и изменил его. Я использую подход с использованием коммутаторов. Мне нужен более элегантный подход.

Я разместил свой код для двух методов, но на самом деле мне нужно изменить 5 методов.

- (NSInteger)tableView:(UITableView *)tableView numberOfRowsInSection:(NSInteger)section
{
 NSInteger rows;

 switch (section) 
 {
    case 0:
    {
        rows = 3;
        break;
    }            
    case 1:
    {
        rows = 4;
        break;
    }
    case 2:
    {
        rows = 4;
        break;
    }
    case 3:
    {
        rows = 4;
        break;
    }
    case 4:
    {
        rows = 7;
        break;
    }

    default:
        rows = 1;
        break;
 }

 return rows;
}


- (UITableViewCell *)tableView:(UITableView *)tableView cellForRowAtIndexPath:(NSIndexPath *)indexPath
{
 switch (indexPath.section) 
 {
    case 0:
    {
        switch (indexPath.section) 
        {
            case 0:
            {
                break;
            }
            case 1:
            {
                break;
            }
            case 2:
            {
                break;
            }                    
            default:
                break;
        }

        break;            
     }
  }
}

Ответы [ 3 ]

1 голос
/ 12 января 2012

Создайте класс скажем TableManager

Передайте табличное представление этому классу и позвольте этому классу предоставить данные для всех ваших табличных представлений.Различайте представления таблиц по значениям тегов настроек для них.

Так что теперь у вас будет контроль над всеми вашими представлениями таблиц в этом одном классе.

Вместо цифр в случае коммутатора используйте перечисление .Это повысит читабельность в вашем коде.

В зависимости от ваших реальных требований вы можете манипулировать поведением этого класса из plist, возможно.

Позвольте мне предоставить некоторый код:

Определитеперечислитель

typedef enum { FIRST_TABLE, SECOND_TABLE, THIRD_TABLE } TableViews;


- (NSInteger)tableView:(UITableView *)tableView numberOfRowsInSection:(NSInteger)section
{

[TableManager getNumberOfRowsForTableView:tableView];

}

В вашем TableManager

+ (NSInteger)getNumberOfRowsForTableView:(UITableView*)theTableView
{

if(theTableView.tag == FIRST_TABLE) //FIRST_TABLE is an enum
{
 //Your conditions goes here
 return 3;
}

}
1 голос
/ 12 января 2012

Используйте файл .plist, где вы можете напрямую изменить его содержимое, и UIViewController просто создаст его UITableView на основе этого. Работа, как шарм для меня.

0 голосов
/ 15 июня 2016

Я создал этот класс, который делает именно то, что вы хотите: https://github.com/Morbix/TableManager

Основное использование TableManager

import TableManager // 1 - import TableManager

class ViewController: UITableViewController {

    override func viewDidLoad() {
        super.viewDidLoad()

        let data = (1...1_000).map { "Row \($0)" }

        data.forEach { element in
            let row = tableView.addRow() // 2 - Add a row

            row.setConfiguration { (row, cell, indexPath) in // 3 - And configure it 
                cell.textLabel?.text = element
            }
        }

        tableView.reloadData()
    }

}

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

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...