Вы можете использовать функцию String.replace (char, "") в простом цикле, чтобы удалить ненужные символы и не повлиять на оставшуюся часть вашего вывода.
s='''{Television
}{Alarm Clock
}{Lamp
}'''
remove='{}'
for char in remove:
s = s.replace(char, " ")
print(s)
вывод :
blockquote>Television Alarm Clock Lamp
Вот два метода, которые, как утверждает первоначальный автор , были рекомендованы инженером IB .
Подробнее см. В фактическом сообщении. Я предпочитаю метод №2, поскольку он кажется более простым.
Метод №1:
- (UITableViewCell *)tableView:(UITableView *)tableView cellForRowAtIndexPath:(NSIndexPath *)indexPath {
UITableViewCell *cell = [tableView dequeueReusableCellWithIdentifier:@"BDCustomCell"];
if (cell == nil) {
// Create a temporary UIViewController to instantiate the custom cell.
UIViewController *temporaryController = [[UIViewController alloc] initWithNibName:@"BDCustomCell" bundle:nil];
// Grab a pointer to the custom cell.
cell = (BDCustomCell *)temporaryController.view;
[[cell retain] autorelease];
// Release the temporary UIViewController.
[temporaryController release];
}
return cell;
}
Метод №2:
- (UITableViewCell *)tableView:(UITableView *)tableView cellForRowAtIndexPath:(NSIndexPath *)indexPath {
UITableViewCell *cell = [tableView dequeueReusableCellWithIdentifier:@"BDCustomCell"];
if (cell == nil) {
// Load the top-level objects from the custom cell XIB.
NSArray *topLevelObjects = [[NSBundle mainBundle] loadNibNamed:@"BDCustomCell" owner:self options:nil];
// Grab a pointer to the first object (presumably the custom cell, as that's all the XIB should contain).
cell = [topLevelObjects objectAtIndex:0];
}
return cell;
}
Обновление (2014 г.): Метод №2 по-прежнему действителен, но для него больше нет документации. Раньше он был в официальных документах , но теперь удален в пользу раскадровок.
Я разместил рабочий пример на Github:
https://github.com/bentford/NibTableCellExample
редактировать для Swift 4.2
override func viewDidLoad() {
super.viewDidLoad()
// Do any additional setup after loading the view.
self.tblContacts.register(UINib(nibName: CellNames.ContactsCell, bundle: nil), forCellReuseIdentifier: MyIdentifier)
}
func tableView(_ tableView: UITableView, cellForRowAt indexPath: IndexPath) -> UITableViewCell {
let cell = tableView.dequeueReusableCell(withIdentifier: MyIdentifier, for: indexPath) as! ContactsCell
return cell
}
Я не знаю, существует ли канонический путь, но здесь является моим методом:
И использует этот код:
MyCustomViewCell *cell = (MyCustomViewCell *)[_tableView dequeueReusableCellWithIdentifier:CellIdentifier];
if (cell == nil) {
UIViewController* c = [[UIViewController alloc] initWithNibName:CellIdentifier bundle:nil];
cell = (MyCustomViewCell *)c.view;
[c release];
}
В Вашем примере, с помощью [1 110]
[nib objectAtIndex:0]
может повредиться, если Apple изменяет порядок пунктов в xib.
То, что я делаю для этого, объявляют IBOutlet UITableViewCell *cell
в Вашем классе контроллера. Затем вызовите NSBundle loadNibNamed
метод класса, который будет питаться UITableViewCell
к ячейке, объявленной выше.
Для xib я создам пустой xib и добавлю эти UITableViewCell
объект в IB, где это может быть установка по мере необходимости. Это представление затем подключено к ячейке IBOutlet
в классе контроллера.
- (UITableViewCell *)tableView:(UITableView *)table
cellForRowAtIndexPath:(NSIndexPath *)indexPath
{
NSLog(@"%@ loading RTEditableCell.xib", [self description] );
static NSString *MyIdentifier = @"editableCellIdentifier";
cell = [table dequeueReusableCellWithIdentifier:MyIdentifier];
if(cell == nil) {
[[NSBundle mainBundle] loadNibNamed:@"RTEditableCell"
owner:self
options:nil];
}
return cell;
}
Вот метод класса, который я использовал для создания пользовательских ячеек из XIBs:
+ (CustomCell*) createNewCustomCellFromNib {
NSArray* nibContents = [[NSBundle mainBundle]
loadNibNamed:@"CustomCell" owner:self options:NULL];
NSEnumerator *nibEnumerator = [nibContents objectEnumerator];
CustomCell *customCell= nil;
NSObject* nibItem = nil;
while ( (nibItem = [nibEnumerator nextObject]) != nil) {
if ( [nibItem isKindOfClass: [CustomCell class]]) {
customCell = (CustomCell*) nibItem;
if ([customCell.reuseIdentifier isEqualToString: @"CustomCell"]) {
break; // we have a winner
}
else
fuelEntryCell = nil;
}
}
return customCell;
}
Затем в XIB, я установил имя класса и идентификатор повторного использования. После этого я могу просто назвать тот метод, по моему мнению, контроллером вместо
[[UITableViewCell] alloc] initWithFrame:]
, Это - много достаточно быстро, и используемый в двух из моих приложений поставки. Это более надежно, чем вызов [nib objectAtIndex:0]
, и в моем уме, по крайней мере, более надежно, чем пример Stephan Burlot, потому что Вы, как гарантируют, только захватите представление из XIB, который является правильным типом.
Загрузка UITableViewCells от XIBs сохраняет много кода, но обычно приводит к ужасной скорости прокрутки (на самом деле, это не XIB, но чрезмерное использование UIViews, которые вызывают это).
я предлагаю, чтобы Вы смотрели на это: ссылка Ссылки
Если вы используете Interface Builder для создания ячеек, убедитесь, что вы установили идентификатор в инспекторе. Затем проверьте, что то же самое при вызове dequeueReusableCellWithIdentifier.
Я случайно забыл установить некоторые идентификаторы в проекте с большим количеством таблиц, и изменение производительности происходило как день и ночь.
Взял ответ Шона Крейвера и немного почистил его.
BBCell.h:
#import <UIKit/UIKit.h>
@interface BBCell : UITableViewCell {
}
+ (BBCell *)cellFromNibNamed:(NSString *)nibName;
@end
BBCell.m:
#import "BBCell.h"
@implementation BBCell
+ (BBCell *)cellFromNibNamed:(NSString *)nibName {
NSArray *nibContents = [[NSBundle mainBundle] loadNibNamed:nibName owner:self options:NULL];
NSEnumerator *nibEnumerator = [nibContents objectEnumerator];
BBCell *customCell = nil;
NSObject* nibItem = nil;
while ((nibItem = [nibEnumerator nextObject]) != nil) {
if ([nibItem isKindOfClass:[BBCell class]]) {
customCell = (BBCell *)nibItem;
break; // we have a winner
}
}
return customCell;
}
@end
Я делаю все свои подклассы UITableViewCell подклассами BBCell, а затем заменяю стандартный
cell = [[[BBDetailCell alloc] initWithStyle:UITableViewCellStyleDefault reuseIdentifier:@"BBDetailCell"] autorelease];
на:
cell = (BBDetailCell *)[BBDetailCell cellFromNibNamed:@"BBDetailCell"];