Подтвердить что ты не робот

Сгруппированная настройка стиля не вступает в силу с 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;

}

4b9b3361

Ответ 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 действует немного неудобно в нечетном случае.