UITableView를 그룹화 스타일로 설정하는 방법


91

UITableViewController섹션 이있는 하위 클래스가 있습니다. 섹션은 기본 스타일 (둥근 모서리 없음)로 표시됩니다. TableView 스타일을 코드에서 그룹화하려면 어떻게해야합니까? 이를 위해 Interface Builder를 사용하지 않으므로 다음과 같은 것이 필요합니다.

[self.tableView setGroupedStyle]

Stack Overflow에서 검색했지만 답변을 얻지 못했습니다.


스위프트 버전 : 링크
후안 Boero

답변:


108

무슨 뜻인지 이해한다면 그 스타일로 컨트롤러를 초기화해야합니다. 다음과 같은 것 :

myTVContoller = [[UITableViewController alloc] initWithStyle:UITableViewStyleGrouped];

3
명시된 바와 같이 변경할 수있는 속성이 아닙니다. 하나는 항상 그룹화됩니다.
Corey Floyd

이것은 정답이 아니며 UITableViewController 하위 클래스가있는 문제를 해결하지 않습니다. UITableViewController를 상속하는 경우 다른 UITableView 또는 UITableViewController를 생성하지 말고 생성자를 재정의해야합니다.
Mikael

질문에 명시된 바와 같이 하위 클래스 컨트롤러 인 경우 어떻게해야합니까?
Ethan Zhao

132

다음을 수행 할 수 있습니다.

UITableView *myTable = [[UITableView alloc] initWithFrame:CGRectZero style:UITableViewStyleGrouped];

스위프트 3 :

let tableView = UITableView.init(frame: CGRect.zero, style: .grouped)

12
이것이 진정한 솔루션입니다! 감사. 받아 들여진 대답은 틀렸다. 적어도 OS 3.0+의 경우
Duck

4
허용 된 솔루션에 오타가 있습니다. 지금 고쳤습니다. 두 답변 모두 저에게 효과적이지만 다른 것을 인스턴스화합니다. 이 대답은 UITableView이고 허용되는 대답은 UITableViewController.
nevan king

3
실제로 허용되는 답변은 오해의 소지가 있습니다. OP가 "UITableViewConotroller 하위 클래스가 있습니다"라고 말한 내용을 읽으십시오. 허용되는 답변은 평범한 jane UITableViewController 만 제공합니다. 세부 사항을 알지 못하면 하위 클래스와 관련된 사용자 문제를 해결할 수 없습니다. 이 대답과 self.myTable을 사용하는 것이 아마도 더 좋을 것입니다, IMHO.
Feloneous Cat

이것은 또한 iOS8의 제약 조건에서도 작동합니다 (iOS7에 대해 알지 못함) ... 테이블 CGRectZero뷰 스타일과 함께 프레임으로 초기화 한 다음 제약 조건을 추가하면 제약 조건과 함께 올바른 스타일을 얻을 수 있습니다.
Glen Selle 2014

20

내 솔루션을 제공합니다. "XIB 모드"에서 작업하고 있습니다. 여기에는 UITableViewController의 하위 클래스 코드가 있습니다.

-(id)initWithCoder:(NSCoder *)aDecoder
{
    self = [super initWithStyle:UITableViewStyleGrouped];
    return self;
}

6
이 솔루션에 대한주의 사항-이것이 NIB의 navigationController 아래에 있으면 해당 참조를 잃고 정말 혼란스러워집니다.
Jesse Millikan 2011

14

아래 코드는 나를 위해 일했으며 UITableview 클래스도 사용하고 있습니다.

- (id)initWithStyle:(UITableViewStyle)style
{
     self = [super initWithStyle:UITableViewStyleGrouped];

     if (self)
    {

     }
    return self;
}

1
이것은 UITableViewController의 하위 클래스를 사용하는 사람들에게 적합한 솔루션입니다. 감사!
Chad Pavliska 2015

11

UITableViewController를 상속하는 경우 tableView를 다시 초기화 할 수 있습니다.

목표 C :

self.tableView = [[UITableView alloc] initWithFrame:CGRectZero style:UITableViewStyleGrouped];

빠른:

self.tableView = UITableView(frame: CGRect.zero, style: .grouped)

6

질문에서 언급 한 것처럼 그렇게 어렵지 않은 설정입니다. 사실 꽤 간단합니다. 스토리 보드에서 시도해보세요.

여기에 이미지 설명 입력


TableViewController의 일부로 이미 tableView를 가지고 있다면이 방법이 가장 좋습니다. 다른 답변 등 새로운있는 tableView, 인스턴스에 더 초점
KARTHIK Kannan은

3

스위프트 4

일반 TableView 사용

let tableView = TableView(frame: .zero, style: .grouped)

TPKeyboardAvoidingTableView 사용

let tableView = TPKeyboardAvoidingTableView(frame: .zero, style: .grouped)


2

UI 자체에서 그룹화 된 스타일을 설정하려면 :-TableView를 선택한 다음 "스타일"(속성 검사기에서))을 일반에서 그룹화로 변경합니다.


2

별도의 신속한 파일로 이미 만든 하위 클래스에서 사용하려는 경우에도이 작업을 수행 할 수 있습니다 (아마 100 % 정확하지는 않지만 작동 함).

override init(style: UITableViewStyle) {
    super.init(style: style)
    UITableViewStyle.Grouped
}

required init?(coder aDecoder: NSCoder) {
    fatalError("init(coder:) has not been implemented")
}

이제 appdelegate.swift에서 다음을 호출 할 수 있습니다.

let settingsController = SettingsViewController(style: .Grouped)

1

스토리 보드 / XIB를 사용하여이 작업을 수행 할 수도 있습니다.

  1. 스토리 보드로 이동-> viewController 선택-> 테이블 선택
  2. 인터페이스 작성기에서 "스타일"속성을 선택합니다.
  3. "그룹화"를 선택하십시오.
  4. 끝난

0

더 많은 테이블에 대해 하나의 TableView가 있고이 테이블 중 하나는 그룹화되고 다른 하나는 일반인 경우 UITableViewDelegate의 함수를 사용하여 일반 스타일을 시뮬레이션 할 수 있습니다.

override func tableView(tableView: UITableView, heightForHeaderInSection section: Int) -> CGFloat {   
    return CGFloat.min
}

0

스위프트 4

스토리 보드를 사용하지 않으려면 도움이 될 수 있습니다.

클로저에서 테이블 뷰를 추가하고 속성을 설정할 수 있습니다.

lazy var tableView: UITableView = {
        let tableView = UITableView(frame: .zero, style: .grouped)

        tableView.backgroundColor = UIColor(named: Palette.secondaryLight.rawValue)
        tableView.rowHeight = 68
        tableView.separatorStyle = .none
        tableView.translatesAutoresizingMaskIntoConstraints = false
        return tableView
    }()

그런 다음 하위보기를 추가하고 제약 조건을 설정하십시오.


-5

그룹화 된 스타일 효과를 줄 수있는 구분선 색상을 명확하게 만들 수도 있습니다.

[myTVContoller.tableView setSeparatorColor:[UIColor clearColor]];

섹션은이 방식으로 축소되지 않습니다.
brduca

-11

당신이 사용할 수있는:

(instancetype)init {
return [[YourSubclassOfTableView alloc] initWithStyle:UITableViewStyleGrouped];
}

-27
self.tableView.style = UITableViewStyleGrouped

편집하다:

이것이 읽기 / 쓰기 속성이라고 가정했습니다. 이 경우 컨트롤러를 인스턴스화 할 때 Dimitris의 조언에 따라 스타일을 설정하거나 (XIB를 사용하는 경우) IB를 통해 설정할 수 있습니다.


답장을 보내 주셔서 감사합니다. XIB를 사용하지 않고 내 사용자 지정 클래스 인 하위보기가있는 탭 컨트롤러가 있습니다. initWithStyle 호출을 어디에 넣을 수 있는지 확실하지 않지만 TableView init을 수행하지 않고 탭 컨트롤러에서 수행합니다. TableViewController에서 initWithStyle을 변경하면 작동하지 않는 것 같습니다.
nevan king

dimitris가 말했듯이 XIB를 사용하지 않는 경우 UITableViewController를 어딘가에 초기화해야합니다 . initWithStyle : 호출을 사용하려는 곳입니다.
drewh
당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.