Сгруппированная настройка стиля не вступает в силу с IB, UITableView
Я создал представление таблицы в приложении iPhone с помощью Interface Builder (IB). Мой стиль таблицы установлен в Grouped и отображается таким образом в IB. Тем не менее, всякий раз, когда я строю и запускаю, он отображается как стиль Plain в симуляторе.
У меня есть другое представление, сгруппированное и не испытывающее этой проблемы. Кто-нибудь сталкивался с этой проблемой раньше?
Остальная часть представления не создается программно, поэтому я бы хотел избежать этого для этого представления. Должно быть, что-то мне не хватает.
Единственный метод tableView, в котором я выполняю много всего, - это метод обработчика ячеек, в котором я включаю текстовое поле в поля выбора:
- (UITableViewCell *)tableView:(UITableView *)tableView cellForRowAtIndexPath:(NSIndexPath *)indexPath {
static NSString *CellIdentifier = @"Cell";
UITableViewCell *cell = [tableView dequeueReusableCellWithIdentifier:CellIdentifier];
if (cell == nil) {
cell = [[[UITableViewCell alloc] initWithStyle:UITableViewCellStyleValue1 reuseIdentifier:CellIdentifier] autorelease];
}
if (indexPath.section == 0) {
if (indexPath.row == 0) {
cell.textLabel.text = @"Title";
UITextField *listTitleTextField = [ [ UITextField alloc ] initWithFrame: CGRectMake(150, 10, 145, 38) ];
listTitleTextField.adjustsFontSizeToFitWidth = YES;
listTitleTextField.textColor = [UIColor blackColor];
listTitleTextField.font = [UIFont systemFontOfSize:17.0];
listTitleTextField.placeholder = @"Your Title";
listTitleTextField.backgroundColor = [UIColor whiteColor];
listTitleTextField.autocorrectionType = UITextAutocorrectionTypeNo; // no auto correction support
listTitleTextField.autocapitalizationType = UITextAutocapitalizationTypeNone; // no auto capitalization support
listTitleTextField.textAlignment = UITextAlignmentRight;
listTitleTextField.keyboardType = UIKeyboardTypeDefault; // use the default type input method (entire keyboard)
listTitleTextField.returnKeyType = UIReturnKeyDone;
listTitleTextField.tag = 0;
listTitleTextField.delegate = self;
listTitleTextField.clearButtonMode = UITextFieldViewModeUnlessEditing; // no clear 'x' button to the right
if (self.wishList.listTitle == nil || [self.wishList.listTitle length] == 0) {
listTitleTextField.text = @"";
}
else {
listTitleTextField.text = self.wishList.listTitle;
}
[listTitleTextField setEnabled: YES ];
[cell addSubview: listTitleTextField ];
[listTitleTextField release];
}
else if (indexPath.row == 1) {
cell.detailTextLabel.text = @"Pick an Icon";
cell.textLabel.text = @"List Icon";
}
}
else {
cell.textLabel.text = @"Add Wish";
}
return cell;
}
Ответы
Ответ 1
По-прежнему не уверен, почему параметр "сгруппированный" стиль не вступает в силу с помощью Interface Builder. Однако вы можете вручную установить его перед созданием представления:
- (id)initWithStyle:(UITableViewStyle)style {
// Override initWithStyle: if you create the controller programmatically and want to perform customization that is not appropriate for viewDidLoad.
style = UITableViewStyleGrouped;
if (self = [super initWithStyle:style]) {
}
return self;
}
Ответ 2
У нас было это, и это заглохло нас около часа. Наконец, мы обнаружили, что нам не удалось установить свойство NIB Name контроллера вида в контроллере навигации (внутри контроллера панели вкладок в нашем главном XIB!). Без этого набора все изменения, внесенные нами в XIB файл нашего представления таблицы, были полностью проигнорированы. В то же время код работал отлично, и нам было очень мало указывать на нашу ошибку.
Бьюсь об заклад, в вашем случае происходит что-то подобное. Убедитесь, что ваш XIB (где вы устанавливаете стиль таблицы) фактически используется.
Ответ 3
Каков ваш базовый класс контроллера? У меня была та же проблема, пока я не переключил свой контроллер с подкласса UITableViewController
на стандартный UIViewController
. Казалось бы, если вы используете UITableViewController
, у него есть собственный встроенный UITableView
и игнорирует тот, который вы укажете в IB.
Ответ 4
При инициализации представления просто выполните следующие действия:
CustomTableViewController *viewController = [[CustomTableViewController alloc] initWithStyle:UITableViewStyleGrouped];
[self.navigationController pushViewController:viewController animated:YES];
[viewController release];
Вместо того, чтобы просто инициализировать. Это решает это для меня.
Ответ 5
Вам нужно указать имя Nib при создании класса, иначе он не будет искать ник по умолчанию, названный так же, как ваш класс. По какой-то причине Apple решила включить свое собственное представление таблицы по умолчанию.
Например, если ваше имя класса "Настройки":
settingsController = [[Settings alloc] initWithNibName:@"Settings" bundle: nil];
Ответ 6
Учитывается ли представление таблицы на событиях и заполняется данными, как вы ожидали? - Похоже, что розетки не подключены должным образом ко мне. Я бы дважды проверял источник данных и делегировал соединения из таблицы в контроллер. Может стоить удалить табличный вид из IB и повторно добавить его и снова подключить его. Я видел, как IB действует немного неудобно в нечетном случае.