2012-05-26 10 views
9

UITableViewController var. Bu denetleyicide, içinde UITextField ile bir alt görünüm UIView ekleyin. UITextField ilk savunan tablonun ilk savunan görünümü ayarlamayatablonun ilk yanıtlayıcı görünümünü ayarlama ama biz onun türünü bilmiyoruz (hücre/üstbilgi/altbilgi)

var olsun ama biz onun tipi (hücre/başlık/alt bilgi) aşağıdaki gibi

Kod bilmezken:

@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]; 
} 

Bu uyarı nasıl önlenir?

+0

Bize "albumNameField" adını bildirdiğiniz yeri gösterir misiniz? – Barjavel

+0

@Barjavel Güncelleme –

+0

@interface UserAlbumListViewController'da bildirimde bulundum: UITableViewController {} 'aynı uyarıyı aldım –

cevap

18

Uyarı, doğrudan tablo görünümüne opaqueView eklediğinizi bildiriyor. Tablo görünümleri, etkileşimli alt görünümlerin tableHeaderView, tableFooterView veya bir hücre içinde eklenmesini bekliyor.

Hata ayıklama satırı [self.view addSubview:opaqueView]; şeklindedir, çünkü self.view tablo görünümüdür.

Bunu düzeltebilirsiniz, bu çeşitli yollardan biridir. Bir navigasyon denetleyicisi kullanıyorsanız, içinde opaqueView bulunan yeni bir denetleyiciyi çalıştırabilirsiniz. İçinde opaqueView ile tablo görünümü üzerinde kalıcı bir görünüm açabilirsiniz. Yapıyı self.view'in bir tablo görünümü (çok fazla iş) olmadığı şekilde değiştirebilirsiniz.


GÜNCELLEME

Bu cevap tür meşgul, bu yüzden bir güncelleme yayınlayacağız. Apple'ın önerdiğimden farklı bir çözüm kullandığını keşfettim. Alt tabloyu bir tablo görünümüne eklemeyi deneyen [self.view addSubview:opaqueView]; yerine, [self.view.window addSubview:opaqueView]; alt görünümü doğrudan tablo görünümünün penceresine eklersiniz. Bir görünüm kullandığınızı ve sınırların ve çerçevenin self.view'dan farklı olabileceğini unutmayın.

+0

bir alt UIview ekleyemiyorum inanmak istemiyorum çöküş nedeni olabilir eğer biri varsa bu hoş olurdu .... thnx önceden – user968597

+0

Gizlemek için bir yolu var mı Bu uyarı mesajı –

+0

Bildiğim kadarıyla değil. Tek çözüm, '- [UITableView addSubview:]' –

1

NavigationController'a aktarılan bir görünüm UIView yerine UITableView örneğiyse bu "(hücre/üstbilgi/altbilgi)" hatasını aldım. Daha sonra, sınıfın Xib editöründe, tuvale bir görünüm ekledim ve daha sonra metin, bir çift daha gözden geçirme yoluyla görünüşe eklendi. UI Builder, UITableView öğesini görüntünün üst sınıfı olarak belirtebilmenizi ve bu görünüme öğe ekleyebilmemize rağmen bir görüntüyü tuval üzerine yerleştirmenize izin verecektir. Bu durumda, "tabloya ilk yanıtlayıcı görünümünü ayarlama ama mesajın türünü bilmiyoruz (hücre/üst bilgi/alt)".

+0

Ve amacın ...? –

+0

... mesajı düzeltmek için yollarını arayan diğer insanlar bu cevabı yararlı bulabilir. –

İlgili konular