2012-05-26 19 views
9

Tôi có UITableViewController. Trong bộ điều khiển này tôi thêm một subview UIView với UITextField trong đó. Khi UITextField được trả lời khi lần đầu tiên cóđặt chế độ xem trả lời đầu tiên của bảng nhưng chúng tôi không biết loại của nó (ô/đầu trang/chân trang)

thiết lập các quan điểm trả lời đầu tiên của bảng nhưng chúng ta không biết loại của nó (tế bào/header/footer)

Mã như sau:

@interface UserAlbumListViewController(){ 
    NSString *newAlbumName; 
    UITextField *albumNameField; 
} 

@end 

-(void)addAlbumButtonPressed:(id)sender{ 
self.tableView.scrollEnabled = NO; 
CGRect frame = self.view.frame; 
UIView *opaqueView = [[UIView alloc] initWithFrame:frame]; 
opaqueView.tag = 1001; 
opaqueView.backgroundColor = [UIColor colorWithWhite:0 alpha:0.5]; 


UIView *controllerView = [[UIView alloc] init]; 
controllerView.tag = 1002; 
controllerView.backgroundColor = [UIColor whiteColor]; 
controllerView.frame = CGRectMake(10.0f, 60.0f, frame.size.width - 20.0f, 90.0f); 
[opaqueView addSubview:controllerView]; 

albumNameField = [[UITextField alloc] init]; 
albumNameField.borderStyle = UITextBorderStyleRoundedRect; 
albumNameField.placeholder = NSLocalizedString(@"Album Name",nil); 
albumNameField.keyboardType = UIKeyboardTypeDefault; 
albumNameField.returnKeyType = UIReturnKeyDefault; 
albumNameField.autocorrectionType = UITextAutocorrectionTypeNo; 
albumNameField.autocapitalizationType = UITextAutocapitalizationTypeNone; 
albumNameField.clearButtonMode = UITextFieldViewModeWhileEditing; 
albumNameField.clearsOnBeginEditing = NO; 
albumNameField.text = @""; 
albumNameField.frame = CGRectMake(10.0f , 10.0f, controllerView.frame.size.width - 20.0f, 30.0f); 
[albumNameField becomeFirstResponder]; 
[controllerView addSubview:albumNameField]; 


UIButton *_cancelButton = [UIButton buttonWithType:UIButtonTypeRoundedRect]; 
_cancelButton.backgroundColor = [UIColor clearColor]; 
[_cancelButton setTitle:NSLocalizedString(@"Cancel",nil) forState:UIControlStateNormal]; 
_cancelButton.frame = CGRectMake(controllerView.frame.size.width - 90.0f, albumNameField.frame.origin.y + albumNameField.frame.size.height + 10.0f, 80.0f, 30.0f); 

[_cancelButton addTarget:self action:@selector(opaqueViewCancelButtonClicked:) forControlEvents:UIControlEventTouchDown]; 
[controllerView addSubview:_cancelButton]; 

UIButton *_OKButton = [UIButton buttonWithType:UIButtonTypeRoundedRect]; 
_OKButton.backgroundColor = [UIColor clearColor]; 
[_OKButton setTitle:NSLocalizedString(@"OK",nil) forState:UIControlStateNormal]; 
_OKButton.frame = CGRectMake(_cancelButton.frame.origin.x - 90.f, _cancelButton.frame.origin.y, 80.0f, 30.0f); 
[_OKButton addTarget:self action:@selector(opaqueViewOKButtonClicked:) forControlEvents:UIControlEventTouchDown]; 
[controllerView addSubview:_OKButton]; 

[self.view addSubview:opaqueView]; 

[controllerView release]; 
[opaqueView release]; 
} 

Làm cách nào để tránh cảnh báo này?

+0

Bạn có thể cho chúng tôi biết nơi bạn khai báo 'albumNameField' không? – Barjavel

+0

@Barjavel Cập nhật –

+0

Tôi đã cố gắng khai báo trong '@interface UserAlbumListViewController: UITableViewController {}' có cùng cảnh báo –

Trả lời

18

Cảnh báo cho bạn biết rằng bạn đã thêm opaqueXem trực tiếp vào chế độ xem bảng. Chế độ xem bảng mong đợi các bản xem trước tương tác sẽ được thêm vào tableHeaderView, tableFooterView hoặc trong một ô.

Đường vi phạm là [self.view addSubview:opaqueView]; vì self.view là chế độ xem bảng.

Bạn có thể sửa lỗi này là một trong nhiều cách. Nếu bạn đang sử dụng một bộ điều khiển điều hướng, bạn có thể đẩy một bộ điều khiển mới với opaqueView trong đó. Bạn có thể bật chế độ xem phương thức trên chế độ xem bảng với opaqueView trong đó. Bạn có thể thay đổi cấu trúc như vậy mà self.view không phải là một khung nhìn bảng (mà là rất nhiều công việc).


CẬP NHẬT

Câu trả lời này là loại bận rộn, vì vậy tôi sẽ đăng một bản cập nhật. Tôi phát hiện ra rằng Apple sử dụng một giải pháp khác nhau sau đó là những gì tôi đề nghị.

Thay vì [self.view addSubview:opaqueView]; cố gắng thêm chế độ xem con vào chế độ xem bảng, bạn có thể làm [self.view.window addSubview:opaqueView];, thêm trực tiếp chế độ xem phụ vào cửa sổ của chế độ xem bảng. Bạn cần lưu ý rằng bạn đang sử dụng chế độ xem để các giới hạn và khung có thể khác với self.view.

+0

này có thể trở thành lý do cho vụ tai nạn nó sẽ được tốt đẹp nếu một số câu trả lời này .... thnx trước – user968597

+0

Có cách nào tôi có thể ẩn thông điệp cảnh báo này? –

+0

Không phải là tôi biết. Giải pháp duy nhất là không gọi '- [UITableView addSubview:]' –

1

Tôi nhận được lỗi "(ô/đầu trang/chân trang)" này khi chế độ xem được đẩy vào NavigationController là một phiên bản của UITableView thay vì UIView. Sau đó, trong trình soạn thảo Xib cho lớp, tôi đã thêm một khung nhìn vào khung vẽ, và sau đó văn bản cuối cùng được thêm vào khung nhìn thông qua một vài khung nhìn khác. Trình tạo giao diện người dùng sẽ cho phép bạn chỉ định UITableView làm siêu lớp của chế độ xem và đặt chế độ xem trên canvas, mặc dù thêm mục vào chế độ xem này sau đó khiến thông báo "đặt chế độ xem trả lời đầu tiên của bảng nhưng chúng tôi không biết loại của nó (ô/đầu trang/chân trang) ".

+0

Và quan điểm của bạn là ...? –

+0

... những người khác đang tìm cách khắc phục thư có thể thấy câu trả lời này hữu ích. –

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