Добавление элементов в UIToolbar программно не работает - PullRequest
5 голосов
/ 18 декабря 2010

Я недавно задавал вопросы, относящиеся к UIToolbars, а что нет, но теперь я обнаружил, что мне нужно добавлять элементы к нему программно, я видел методы других людей о том, как это сделать, но когда я пытаюсь сделать то же самоевещь, ничто не заканчивает тем, что появилось.Определение этой проблемы - вот в чем я нуждаюсь.Вот мои соединения в IB:

alt text

А вот соответствующий код:

Заголовочный файл:

#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]];

И я получаю пустую панель инструментов, которая появляется.Я запускаю отладчик, и вот что я вижу: enter image description here Ага!Поле _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 ]

12 голосов
/ 10 января 2011

Код должен работать ... Есть пара предложений, которые я мог бы сделать. Вместо:

[toolbar setItems:[NSArray arrayWithObject:lastUpdateLabel]];

попробуйте это:

[toolbar setItems:[NSArray arrayWithObject:lastUpdateLabel] animated:YES];

Кроме того, поскольку вы используете UINavigationController, NavControllers имеют собственную панель инструментов, которую вы можете использовать, если хотите. По умолчанию он скрыт, что вы можете сделать видимым, выполнив это:

self.navigationController.toolbarHidden = NO;

и вы можете установить элементы панели инструментов, выполнив это:

[self setToolbarItems:[NSArray arrayWithObject:lastUpdateLabel]];

Надеюсь, этот бит поможет вам. удачи!

1 голос
/ 07 июля 2011

// попробуйте это.

- (void)viewDidAppear:(BOOL)animated
{
    [toolbar setItems:[NSArray arrayWithObject:lastUpdateLabel]];
}
1 голос
/ 15 июня 2011

Кнопки должны быть добавлены viewController, который нажимается navigationController.navController содержит панель, но элементы на панели управляются (добавляются) показанным viewController.Таким образом, каждый вид VC имеет свой собственный бар.

Итак, возьмите этот код barbuttonitem, вставьте его в раздел инициализации vc и наслаждайтесь.

0 голосов
/ 16 июля 2013

Вы можете добавить ярлык на панель инструментов напрямую, если вы создали его с рамкой ... например

   UILabel *lbl=[[UILabel alloc]initWithFrame:CGRectMake(7,7,200,30)];

   [lbl setBackgroundColor:[UIColor clearColor]];

   [lbl setText:@"Test lbl"];

   [_toolBar addSubview:lbl];
0 голосов
/ 18 декабря 2010

Отправленный код работает нормально, я думаю, что это должно быть так, как подключен XIB. Я бы заново сделал ваши соединения в IB (то есть разорвал все соединения и сделал их заново), сохрани ваш XIB и попытался бы снова.

...