Загрузка допускающего повторное использование UITableViewCell от пера

Не работает Python 3 здесь, но, возможно, что-то вроде этого будет работать. Тест, чтобы увидеть, делает ли «меньше» сравнение «значение», создает исключение, а затем выполняет «что-то», чтобы обработать этот случай, например, преобразовать его в строку.

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

from numbers import Real
from decimal import Decimal

def motley(value):
    numeric = Real, Decimal
    if isinstance(value, numeric):
        typeinfo = numeric
    else:
        typeinfo = type(value)

    try:
        x = value < value
    except TypeError:
        value = repr(value)

    return repr(typeinfo), value

>>> print sorted([0, 'one', 2.3, 'four', -5, (2+3j), (1-3j)], key=motley)
[-5, 0, 2.3, (1-3j), (2+3j), 'four', 'one']
89
задан TheNeil 23 May 2019 в 20:13
поделиться

9 ответов

Просто реализуйте метод с соответствующей сигнатурой метода:

- (NSString *) reuseIdentifier {
  return @"myIdentifier";
}
74
ответ дан Louis Gerbarg 24 November 2019 в 07:08
поделиться

Если это имеет значение я спросил инженера iPhone об этом в одном из iPhone Tech Talks. Его ответ был, "Да, возможно использовать IB для создания ячеек. Но не делайте. Не делайте".

0
ответ дан August 24 November 2019 в 07:08
поделиться

Метод Louis работал на меня. Это - код, который я использую для создания UITableViewCell из пера:

- (UITableViewCell *)tableView:(UITableView *)tableView cellForRowAtIndexPath:(NSIndexPath *)indexPath
{   
    UITableViewCell *cell = (UITableViewCell *)[tableView dequeueReusableCellWithIdentifier:@"CustomCellId"];

    if (cell == nil) 
    {
        UIViewController *c = [[UIViewController alloc] initWithNibName:@"CustomCell" bundle:nil];
        cell = (PostCell *)c.view;
        [c release];
    }

    return cell;
}
2
ответ дан ggarber 24 November 2019 в 07:08
поделиться

Посмотрите на ответ, который я дал этому вопросу:

действительно ли возможно разработать подклассы NSCell в Интерфейсном Разработчике?

не только возможно разработать UITableViewCell в IB, это желательно, потому что иначе все ручное проводное соединение и размещение нескольких элементов очень утомительно. Performaance прекрасен, пока Вы стараетесь сделать все элементы непрозрачными, если это возможно. reuseID установлен в IB для свойств UITableViewCell, тогда Вы используете идентификатор повторного использования соответствия в коде при попытке исключить из очереди.

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

12
ответ дан Community 24 November 2019 в 07:08
поделиться

На самом деле, поскольку вы строите ячейку в Интерфейсном Разработчике, просто установите там идентификатор повторного использования:

IB_reuse_identifier

Или если вы работаете с Xcode 4, проверьте вкладку Инспектора атрибутов:

enter image description here

(Правка: после того, как ваш XIB сгенерирован XCode, он содержит пустой UIView, но нам нужен UITableViewCell; поэтому вам нужно вручную удалить UIView и вставить таблицу Просмотр ячейки. Конечно, IB не будет показывать какие-либо параметры UITableViewCell для UIView.)

119
ответ дан 24 November 2019 в 07:08
поделиться

Я не могу вспомнить, где я изначально нашел этот код, но пока он отлично работает у меня.

- (UITableViewCell *)tableView:(UITableView *)tableView 
         cellForRowAtIndexPath:(NSIndexPath *)indexPath {

    static NSString *CellIdentifier = @"CustomTableCell";
    static NSString *CellNib = @"CustomTableCellView";

    UITableViewCell *cell = (UITableViewCell *)[tableView dequeueReusableCellWithIdentifier:CellIdentifier];
    if (cell == nil) {
        NSArray *nib = [[NSBundle mainBundle] loadNibNamed:CellNib owner:self options:nil];
        cell = (UITableViewCell *)[nib objectAtIndex:0];
    }

    // perform additional custom work...

    return cell;
}

Пример установки Interface Builder ...

alt text

47
ответ дан 24 November 2019 в 07:08
поделиться

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

[Nib Objectat ...] подход подвержен изменениям в позициях элементов в массиве.

UIViewController Подход хорош - просто попробовал его, и он работает достаточно приятно.

Но ...

Во всех случаях конструктор INITWITHSTYLE конструктор не вызывается, поэтому не выполняется инициализация по умолчанию.

Я прочитал различные места по использованию INITWITHCODER или AWARKEROMNIB , но никаких убедительных доказательств того, что любой из них является правильным способом.

Помимо прямого вызова некоторых методов инициализации в методе CellforlaTindexpath , я еще не нашел ответ на это.

2
ответ дан 24 November 2019 в 07:08
поделиться

Некоторое время назад я нашел отличное сообщение в блоге по этой теме на blog.atebits.com , и с тех пор я начал использовать класс Loren Brichter ABTableViewCell для всех моих UITableViewCells .

В итоге вы получаете простой контейнер UIView для размещения всех ваших виджетов, а прокрутка выполняется молниеносно.

Надеюсь, это будет полезно.

2
ответ дан 24 November 2019 в 07:08
поделиться

Решение gustavogb не работает для меня, я попробовал следующее:

ChainesController *c = [[ChainesController alloc] initWithNibName:@"ChainesController" bundle:nil];
[[NSBundle mainBundle] loadNibNamed:@"ChaineArticleCell" owner:c options:nil];
cell = [c.blogTableViewCell retain];
[c release];

Кажется, это работает. BlogTableViewCell является IBOutlet для ячейки, а ChainesController является владельцем файла.

1
ответ дан 24 November 2019 в 07:08
поделиться
Другие вопросы по тегам:

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