Не работает 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']
Просто реализуйте метод с соответствующей сигнатурой метода:
- (NSString *) reuseIdentifier {
return @"myIdentifier";
}
Если это имеет значение я спросил инженера iPhone об этом в одном из iPhone Tech Talks. Его ответ был, "Да, возможно использовать IB для создания ячеек. Но не делайте. Не делайте".
Метод 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;
}
Посмотрите на ответ, который я дал этому вопросу:
действительно ли возможно разработать подклассы NSCell в Интерфейсном Разработчике?
не только возможно разработать UITableViewCell в IB, это желательно, потому что иначе все ручное проводное соединение и размещение нескольких элементов очень утомительно. Performaance прекрасен, пока Вы стараетесь сделать все элементы непрозрачными, если это возможно. reuseID установлен в IB для свойств UITableViewCell, тогда Вы используете идентификатор повторного использования соответствия в коде при попытке исключить из очереди.
я также получил известие от некоторых предъявителей в WWDC в прошлом году, что Вы не должны делать ячейки табличного представления в IB, но это - загрузка койки.
На самом деле, поскольку вы строите ячейку в Интерфейсном Разработчике, просто установите там идентификатор повторного использования:
Или если вы работаете с Xcode 4, проверьте вкладку Инспектора атрибутов:
(Правка: после того, как ваш XIB сгенерирован XCode, он содержит пустой UIView, но нам нужен UITableViewCell; поэтому вам нужно вручную удалить UIView и вставить таблицу Просмотр ячейки. Конечно, IB не будет показывать какие-либо параметры UITableViewCell для UIView.)
Я не могу вспомнить, где я изначально нашел этот код, но пока он отлично работает у меня.
- (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 ...
Я создаю свои пользовательские видочные ячейки аналогичным образом - за исключением я подключаю клетку через Iboutlet.
[Nib Objectat ...]
подход подвержен изменениям в позициях элементов в массиве.
UIViewController
Подход хорош - просто попробовал его, и он работает достаточно приятно.
Но ...
Во всех случаях конструктор INITWITHSTYLE
конструктор не вызывается, поэтому не выполняется инициализация по умолчанию.
Я прочитал различные места по использованию INITWITHCODER
или AWARKEROMNIB
, но никаких убедительных доказательств того, что любой из них является правильным способом.
Помимо прямого вызова некоторых методов инициализации в методе CellforlaTindexpath
, я еще не нашел ответ на это.
Некоторое время назад я нашел отличное сообщение в блоге по этой теме на blog.atebits.com , и с тех пор я начал использовать класс Loren Brichter ABTableViewCell для всех моих UITableViewCells .
В итоге вы получаете простой контейнер UIView для размещения всех ваших виджетов, а прокрутка выполняется молниеносно.
Надеюсь, это будет полезно.
Решение 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 является владельцем файла.