Program görünümünde, bir tablo görünümünün alt tarafına Uitextfield ile bir araç çubuğu nasıl eklenir? Bir sohbet ya da sms uygulaması gibi .. şimdiden teşekkür ederim ..UITableView nes-c/ios/xcode BOTTOM'ına araç çubuğu nasıl eklenir
cevap
Öncelikle her şeyi tutmak için bir görünüm oluşturun. o tableview .Add altında araç çubuğu
UIView *placeholderView=[[UIView alloc]initWithFrame:CGRectMake(0, 0, 400, 440)];
UITableView *tv=[[UITableView alloc]initWithFrame:CGRectMake(0, 0, 400, 400)];
[placeholderView addSubview:tv];
UIToolbar *toolBar=[[UIToolbar alloc]initWithFrame:CGRectMake(0, 400, 400, 40)];
[placeholderView addSubview:toolBar];
Kullanım yerine UITableViewController alt sınıfının bir UIViewController alt sınıf textfield'ı görünecek şekilde Sonra bir UITableView ve UIToolbar programlı set çerçeve ekleyin.
@interface ChatViewController : UIViewController
@end
#import "ChatViewController.h"
@interface ChatViewController() <UITableViewDelegate, UITableViewDataSource, UITextFieldDelegate>
@property (nonatomic, strong) UITableView *tableView;
@property (nonatomic, strong) UIToolbar *toolbar;
@property (nonatomic, strong) UITextField *textField;
@end
@implementation ChatViewController
-(UITableView *)tableView
{
if (!_tableView) {
_tableView = [UITableView alloc] init];
CGRect frame = self.view.bounds;
frame.size.height = frame.size.height - 44;
_tableView.frame = frame;
_tableView.delegate = self;
_tableView.dataSource = self;
}
return _tableView;
}
-(UIToolbar *)toolbar
{
if (!_toolbar) {
_toolbar = [[UIToolbar alloc] initWithFrame:CGRectMake(0,self.tableView.frame.size.height,self.view.frame.size.width, 44)];
self.textField = [[UITextField alloc] initWithFrame:CGRectMake(0,0,_toolbar.frame.size.width -20)];
self.textField.delegate = self;
UIBarButtonItem *textFieldItem = [[UIBarButtonItem alloc] initWithCustomView:self.textField];
UIBarButtonItem *flexibleSpace = [[UIBarButtonItem alloc] initWithBarButtonSystemItem:UIBarButtonSystemItemFlexibleSpace
target:nil
action:nil];
// You'll need to add a button to send you text
_toolbar.items = [NSArray arrayWithObjects:flexibleSpace, textFieldItem, flexibleSpace, nil];
}
return _toolbar;
}
-(void)viewDidLoad
{
[super viewDidLoad];
[self.view addSubview:self.tableView];
[self.view addSubview:self.toolbar];
[[NSNotificationCenter defaultCenter] addObserver:self
selector:@selector(keyboardWillHideOrShow:)
name:UIKeyboardWillHideNotification
object:nil];
[[NSNotificationCenter defaultCenter] addObserver:self
selector:@selector(keyboardWillHideOrShow:)
name:UIKeyboardWillShowNotification
object:nil];
}
- (void)viewDidUnload
{
[[NSNotificationCenter defaultCenter] removeObserver:self];
[super viewDidUnload];
}
- (void)keyboardWillHideOrShow:(NSNotification *)note
{
NSDictionary *userInfo = note.userInfo;
NSTimeInterval duration = [[userInfo objectForKey:UIKeyboardAnimationDurationUserInfoKey] doubleValue];
UIViewAnimationCurve curve = [[userInfo objectForKey:UIKeyboardAnimationCurveUserInfoKey] intValue];
CGRect keyboardFrame = [[userInfo objectForKey:UIKeyboardFrameEndUserInfoKey] CGRectValue];
CGRect keyboardFrameForToolbar = [self.toolbar.superview convertRect:keyboardFrame fromView:nil];
CGRect keyboardFrameForTableView = [self.tableView.superview convertRect:keyboardFrame fromView:nil];
CGRect newToolbarFrame = self.toolbar.frame;
newToolbarFrame.origin.y = keyboardFrameForToolbar.origin.y - newToolbarFrame.size.height;
CGRect newTableViewFrame = self.tableView.frame;
newTableViewFrame.size.height = keyboardFrameForTableView.origin.y - newToolbarFrame.size.height;
[UIView animateWithDuration:duration
delay:0
options:UIViewAnimationOptionBeginFromCurrentState | curve
animations:^{self.toolbar.frame = newToolbarFrame;
self.tableView.frame =newTableViewFrame;}
completion:nil];
}
Bu görünümler dışarı atarken ve klavye görünümünü animasyon işlemek olacaktır:
böyle bir şey olması gerekir. Tablo görünümü ve metin alanı için temsilci ve veri kaynağı yöntemlerini kullanmanız gerekir.
İyi cevap, umut verici görünüyor ama tablo görünümü ve araç çubuğu boyutları düzgün ayarlandığı sürece 'UITableViewController' kullanmanın herhangi bir sakıncası olmadığını tahmin ediyorum. Neden UITableViewController' kullanmamayı önerdin merak ediyorum? –
'UITableViewController', alt görünümlerini tablo görünümü olan ana görünümüne eklemeyi denediğinizde zor olabilir. – Moxy
Daha iyi bir numara buldum!
- NOT (Xcode sihirli altta sizin için yerleştirecektir) YOK Gezinme Çubuğu
- Drag (sizin başarısız girişimden itibaren) olduğundan emin olun ve bir "Bar Düğme Öğe" drop: Uygulamayı Şimdi Çalıştırırsanız, hiçbir şey görmeyeceksiniz!
- viewDidLoad altında aşağıdaki kod satırını ekleyin (bu yüzden okumaya devam):
self.navigationController.toolbarHidden = HAYIR;
Bitti!
Bazı şekillerde bu harika bir şey değil, ancak bunu ek bir View Controller'da bir Container View kullanarak çözdüm.
Tablo VC segue için Orta VC
Ben çözüm "Nav Denetleyicisindeki Toolbar" yerine bu kullanılan "Yerleştir" dir Ben ile varolan uygulama tasarımına bu ekliyorum çünkü ~ 15 ekran ve farklı ekranlarda farklı araç çubuklarını nasıl yapılandıracağımı bilmiyordum.Bunun mükemmel olmadığını kabul ediyorum, ancak IOS'a sadece bir UTIiolControl ekleyemezsiniz. UINavigationController. Durumumda UINC'ları UINC'nin diğer "tasarım özellikleri" nedeniyle bir UINC'ye gömemem. –
henüz bir şey yok .. görebildiğim herhangi bir gönderi üstte eklemekle ilgili – snksnk