2009-11-21 24 views
17

Tôi đã tạo chế độ xem bảng trong ứng dụng iPhone bằng Trình tạo giao diện (IB). Kiểu bảng của tôi được đặt thành Nhóm và hiển thị theo cách đó trong IB. Tuy nhiên, bất cứ khi nào tôi xây dựng và chạy, nó sẽ hiển thị như một kiểu Plain trong trình mô phỏng.Cài đặt kiểu nhóm không có hiệu lực từ IB, UITableView

Tôi có một chế độ xem khác được đặt thành Nhóm và không gặp sự cố này. Có ai gặp vấn đề này trước đây không?

Phần còn lại của chế độ xem không được tạo theo chương trình, vì vậy, tôi muốn tránh làm điều đó cho chế độ xem này. Phải có một cái gì đó tôi đang mất tích.

Phương pháp tableView duy nhất tôi đang làm nhiều bất cứ điều gì trong là phương pháp xử lý ô, nơi tôi đang kết hợp với một hộp văn bản vào các lĩnh vực chọn:

- (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; 

}

+0

Đăng mã của bạn? –

+0

Không thực sự bất kỳ mã chương trình nào để đăng là vấn đề, đặt Kiểu thành "được nhóm" trong IB, sau đó chỉ cần thực hiện các phương thức I/F thường lệ để đặt tên phần và sửa đổi ô bảng khi cần để hiển thị giá trị. –

+0

Bạn có sử dụng kết hợp này với UITabBarController không? – JamesSugrue

Trả lời

8

Vẫn không chắc chắn lý do tại sao cài đặt kiểu "được nhóm" không có hiệu lực từ Trình tạo giao diện. Tuy nhiên, bạn có thể đặt thủ công cài đặt này trước khi chế độ xem được tạo tại đây:

- (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; 
} 
+0

Phiên bản mã này hoạt động nhưng câu trả lời của Joe ở trên chỉ hoạt động đối với phiên bản IB. – earnshavian

+0

Cùng một mã, tôi đã triển khai nhưng không hoạt động trong iPhone 5, Bạn có gợi ý nào – Raj

0

Liệu các xem bảng đáp ứng cho các sự kiện và có được dữ liệu như bạn mong đợi? - Có vẻ như các cửa hàng không được kết nối đúng cách với tôi. Tôi muốn kiểm tra lại nguồn dữ liệu và ủy quyền các kết nối từ tableview đến controller. Có thể có giá trị xóa tableview từ IB và thêm lại nó và tái kết nối nó là tốt. Tôi đã nhìn thấy IB hành động một chút khó tính trong trường hợp kỳ lạ.

+0

Đã xóa nó và tạo một chế độ xem bảng mới. Sau đó, đính kèm nguồn dữ liệu và ủy nhiệm cho chủ sở hữu tập tin. Đồng thời đính kèm chế độ xem trong chủ sở hữu tệp vào bảng. Vấn đề reamins giống nhau. –

13

Chúng tôi đã thực hiện điều này và nó khiến chúng tôi mất khoảng một giờ. Cuối cùng chúng tôi thấy rằng chúng tôi đã thất bại trong việc thiết lập thuộc tính NIB Name của bộ điều khiển xem bên trong bộ điều khiển điều hướng (bên trong bộ điều khiển thanh tab, trong XIB chính của chúng tôi!). Nếu không có bộ đó, tất cả các thay đổi mà chúng tôi đã thực hiện đối với tệp XIB của chế độ xem bảng của chúng tôi đã bị bỏ qua hoàn toàn. Tuy nhiên, các mã đã làm việc tốt nếu không, và có rất ít để chỉ cho chúng tôi sai lầm của chúng tôi.

Tôi đặt cược điều gì đó tương tự đang xảy ra trong trường hợp của bạn. Hãy chắc chắn rằng XIB của bạn (nơi bạn thiết lập kiểu bảng) thực sự đang được sử dụng.

+0

Tôi có thể xác nhận điều này hoạt động không. Đặt tên NIB thành tên của tệp xib của bạn mà không có phần mở rộng .xib. Điều này sẽ được đánh dấu là câu trả lời cho giải pháp duy nhất của IB. – earnshavian

9

Lớp cơ sở của bộ điều khiển của bạn là gì? Tôi đã có cùng một vấn đề, cho đến khi tôi chuyển bộ điều khiển của tôi từ phân lớp UITableViewController thành chỉ một tiêu chuẩn UIViewController. Có vẻ như bạn đang sử dụng một số UITableViewController, nó có sẵn UITableView được tích hợp sẵn của nó và bỏ qua cái bạn chỉ định trong IB.

+0

Điều đó đã hiệu quả trong trường hợp của tôi! Cảm ơn bạn! –

+0

Giúp tôi quá - cảm ơn! –

+0

OMG cảm ơn bạn rất nhiều. –

2

Bạn cần phải chỉ định tên Nib khi bạn tạo lớp hoặc nếu không nó sẽ không tìm kiếm nib mặc định được đặt tên giống như lớp của bạn. Vì một lý do nào đó, Apple đã quyết định bao gồm chế độ xem bảng của riêng mình làm mặc định.

Ví dụ, nếu tên lớp của bạn là "Settings":

settingsController = [[Settings alloc] initWithNibName:@"Settings" bundle: nil];

4

Khi initialising quan điểm chỉ làm như sau:

CustomTableViewController *viewController = [[CustomTableViewController alloc] initWithStyle:UITableViewStyleGrouped]; 
[self.navigationController pushViewController:viewController animated:YES]; 
[viewController release]; 

Thay vì chỉ init. Điều này giải quyết nó cho tôi.

Các vấn đề liên quan