Добавление элементов в UIToolbar программно не работает
Недавно я задавал вопросы, относящиеся к UIToolbars, а что нет, но теперь я обнаружил, что мне нужно добавлять элементы к нему программно, я видел методы других людей о том, как это сделать, но когда я пытаюсь сделать то же самое, ничего в конечном итоге появляется. Определение этой проблемы - вот в чем я нуждаюсь. Вот мои связи в IB:
И вот соответствующий код:
Заголовочный файл:
#import <UIKit/UIKit.h>
@interface ParkingRootViewController : UIViewController {
UINavigationController *navigationController;
UIToolbar *toolbar;
UIBarButtonItem *lastUpdateLabel;
}
@property(nonatomic, retain) IBOutlet UINavigationController *navigationController;
@property (nonatomic, retain) IBOutlet UIToolbar *toolbar;
@property (nonatomic, retain) IBOutlet UIBarButtonItem *lastUpdateLabel;
- (IBAction)selectHome:(id)sender;
@end
Файл реализации:
- (void)viewDidLoad {
[super viewDidLoad];
UILabel *label = [[UILabel alloc] initWithFrame:CGRectMake(0.0f, 0.0f, 150.0f, 20.0f)];
label.text = @"last updated...";
label.textColor = [UIColor colorWithWhite:1.0 alpha:1.0];
label.backgroundColor = [UIColor clearColor];
label.textAlignment = UITextAlignmentCenter;
label.font = [UIFont boldSystemFontOfSize:13.0];
label.userInteractionEnabled = NO;
lastUpdateLabel = [[UIBarButtonItem alloc] initWithCustomView:label];
[label release];
[toolbar setItems:[NSArray arrayWithObject:lastUpdateLabel]];
[self.view addSubview:self.navigationController.view];
//[self.view addSubview:toolbar];
//[self.navigationController.view addSubview:toolbar];
[self.navigationController.view setFrame:self.view.frame];
}
Любая помощь с благодарностью!
РЕДАКТИРОВАТЬ:
Я удалил все, что у меня было в перо, что привело к появлению / изменению панели инструментов, и я обновил свой код в viewDidLoad следующим образом:
self.navigationController.toolbarHidden = NO;
//creating label in tool bar
UILabel *label = [[UILabel alloc] initWithFrame:CGRectMake(0.0f, 0.0f, 150.0f, 20.0f)];
label.text = @"last updated...";
label.textColor = [UIColor colorWithWhite:1.0 alpha:1.0];
label.backgroundColor = [UIColor clearColor];
label.textAlignment = UITextAlignmentCenter;
//label.highlightedTextColor = [UIColor colorWithWhite:0.5 alpha:1.0];
//label.highlighted = YES;
label.font = [UIFont systemFontOfSize:13.0];
label.userInteractionEnabled = NO;
UIBarButtonItem *lastUpdateLabel = [[UIBarButtonItem alloc] initWithCustomView:label];
//[lastUpdateLabel initWithCustomView:label];
//[label release];
//[toolbar setItems:[NSArray arrayWithObject:lastUpdateLabel]];
[self setToolbarItems:[NSArray arrayWithObject:lastUpdateLabel]];
И в итоге я вижу пустую панель инструментов. Я запускаю отладчик, и вот что я вижу: Ага! Поле _text представления lastUpdateLabel находится вне области видимости! Но почему? И как бы я исправить это?
РЕДАКТИРОВАТЬ 2:
Я смог добавить метки и NSActivityIndicator со следующим кодом:
@synthesize refreshDataButton;
//...
self.navigationController.toolbarHidden = NO;
UILabel *label = [[UILabel alloc] initWithFrame:CGRectMake(20.0f, 0.0f, 80.0f, 40.0f)];
label.text = @"last updated...";
label.textColor = [UIColor colorWithWhite:1.0 alpha:1.0];
label.backgroundColor = [UIColor clearColor];
label.textAlignment = UITextAlignmentCenter;
label.font = [UIFont systemFontOfSize:13.0];
label.userInteractionEnabled = NO;
[self.toolbar addSubview:label];
// create activity indicator
// dist frm lft, dist frm top
CGRect frame = CGRectMake( 90.0, 11.0, 25.0, 25.0);
UIActivityIndicatorView *loading = [[UIActivityIndicatorView alloc] initWithFrame:frame];
loading.activityIndicatorViewStyle = UIActivityIndicatorViewStyleWhite;
[loading sizeToFit];
loading.autoresizingMask = (UIViewAutoresizingFlexibleLeftMargin |
UIViewAutoresizingFlexibleRightMargin | UIViewAutoresizingFlexibleTopMargin |
UIViewAutoresizingFlexibleBottomMargin);
[loading startAnimating];
[self.toolbar addSubview:loading];
Но когда я пытаюсь добавить UIBarButtonItem, мне не везет (не отображается на панели инструментов):
self.refreshDataButton = [[UIBarButtonItem alloc] initWithBarButtonSystemItem:100 target:self action:@selector(refreshDataButtonTapped)];
[self setToolbarItems:[NSArray arrayWithObject:refreshDataButton]];
Вот заголовочный файл:
#import <UIKit/UIKit.h>
//#import <CoreData/CoreData.h>
@interface ParkingRootViewController : UIViewController {
UINavigationController *navigationController;
UIToolbar *toolbar;
UIBarButtonItem *refreshDataButton;
//UIActivityIndicatorView *loading;
}
@property (nonatomic, retain) IBOutlet UINavigationController *navigationController;
@property (nonatomic, retain) IBOutlet UIToolbar *toolbar;
@property (nonatomic, retain) UIBarButtonItem *refreshDataButton;
//@property (nonatomic, retain) IBOutlet UIActivityIndicatorView *loading;
@property (nonatomic, readonly) NSString *applicationDocumentsDirectory;
-(IBAction)selectHome:(id)sender;
-(void)testCoreData;
-(void)refreshDataButtonTapped;
@end
5 ответов
Код должен работать... Есть пара предложений, которые я мог бы сделать. Вместо:
[toolbar setItems:[NSArray arrayWithObject:lastUpdateLabel]];
попробуй это:
[toolbar setItems:[NSArray arrayWithObject:lastUpdateLabel] animated:YES];
Кроме того, поскольку вы используете UINavigationController, NavController поставляется с собственной панелью инструментов, которую вы можете использовать, если хотите. По умолчанию он скрыт, что вы можете сделать видимым, выполнив это:
self.navigationController.toolbarHidden = NO;
и вы можете установить элементы панели инструментов, выполнив это:
[self setToolbarItems:[NSArray arrayWithObject:lastUpdateLabel]];
Надеюсь, это немного поможет вам. удачи!
Кнопки должны быть добавлены viewController
это подталкивается navigationController
, navController
удерживает панель, но элементы на панели управляются (добавляются) viewController
это показывается. Таким образом, каждый вид VC имеет свой собственный бар.
Так что возьми barbuttonitem
код, и вставьте его в разделе инициализации vc, и наслаждайтесь.
//Попробуй это.
- (void)viewDidAppear:(BOOL)animated
{
[toolbar setItems:[NSArray arrayWithObject:lastUpdateLabel]];
}
Размещенный код работает нормально, я думаю, это должно быть так, как подключен XIB. Я бы заново сделал ваши соединения в IB (то есть разорвал все соединения и сделал их заново), сохранил ваш XIB и попытался бы снова.
Вы можете добавить ярлык на панель инструментов напрямую, если вы создали его с помощью рамки... например
UILabel *lbl=[[UILabel alloc]initWithFrame:CGRectMake(7,7,200,30)];
[lbl setBackgroundColor:[UIColor clearColor]];
[lbl setText:@"Test lbl"];
[_toolBar addSubview:lbl];