Разделитель UITableViewCell не отображается

not необходимо поместить реализацию в файл заголовка, см. альтернативное решение в конце этого ответа.

В любом случае причина, по которой ваш код не работает, что при создании экземпляра шаблона компилятор создает новый класс с заданным аргументом шаблона. Например:

template
struct Foo
{
    T bar;
    void doSomething(T param) {/* do stuff using T */}
};

// somewhere in a .cpp
Foo f; 

При чтении этой строки компилятор создаст новый класс (назовем его FooInt), что эквивалентно следующему:

struct FooInt
{
    int bar;
    void doSomething(int param) {/* do stuff using int */}
}

Следовательно, компилятор должен иметь доступ к реализации методов, чтобы создать экземпляр с аргументом шаблона (в данном случае int). Если эти реализации не были в заголовке, они не были бы доступны, поэтому компилятор не смог бы создать экземпляр шаблона.

Общим решением для этого является запись объявления шаблона в заголовок файла, затем реализовать класс в файле реализации (например, .tpp) и включить этот файл реализации в конец заголовка.

// Foo.h
template 
struct Foo
{
    void doSomething(T param);
};

#include "Foo.tpp"

// Foo.tpp
template 
void Foo::doSomething(T param)
{
    //implementation
}

Таким образом, реализация по-прежнему отделена от объявления, но доступен компилятору.

Другое решение состоит в том, чтобы сохранить реализацию отдельно и явно создать все экземпляры шаблона, которые вам понадобятся:

// Foo.h

// no implementation
template  struct Foo { ... };

//----------------------------------------    
// Foo.cpp

// implementation of Foo's methods

// explicit instantiations
template class Foo;
template class Foo;
// You will only be able to use Foo with int or float

Если мое объяснение isn ' t достаточно ясно, вы можете взглянуть на C ++ Super-FAQ по этому вопросу .

29
задан DexterW 30 August 2010 в 13:59
поделиться

2 ответа

Связан ли UITableViewCell в IB с подклассом UITableViewCell, который переопределяет drawRect:? Если это так, убедитесь, что вы вызываете супер реализацию, так как это то, что рисует линию внизу. Если вы переопределяете layoutSubviews, убедитесь, что никакие представления не закрывают нижнюю часть ячейки.

51
ответ дан 28 November 2019 в 00:36
поделиться

Я нашел separatorStyle в справочнике по классу UITableView. Он говорит, что добавит separatorStyle в ячейку, возвращаемую методом делегата, tableView:cellForRowAtIndex:.

Итак, я думаю, вам следует изменить свойство стиля в экземпляре UITableView.

1
ответ дан 28 November 2019 в 00:36
поделиться
Другие вопросы по тегам:

Похожие вопросы: