Добавление элементов в 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];
Другие вопросы по тегам