1
我一直在試圖解決這個問題,但我無法弄清楚如何。重新加載導航欄UIBarButtonItems
我有一個UIButton
我需要添加一個UILabel
作爲子視圖。
我需要更新此UIButton
,因爲我沒有所需的數字,直到通過NSNotification
調用方法。
問題是,使用此代碼UIBarButtonItem
需要很長時間才能更改,並且如果滾動UITableView
(navBar消失),則兩個按鈕消失(即使導航欄再次出現)。
- (void) addSettingsButton {
self.navigationItem.rightBarButtonItems = nil;
UIButton * button2 = [UIButton buttonWithType:UIButtonTypeSystem];
button2.frame = CGRectMake(0, 0, 19, 19);
[button2 setImage:[UIImage imageNamed:@"settingsBtn.png"] forState:UIControlStateNormal];
button2.tintColor = [UIColor grayColor];
[button2 addTarget:self action:@selector(showSettings) forControlEvents:UIControlEventTouchUpInside];
//self.navigationItem.rightBarButtonItem = [[UIBarButtonItem alloc] initWithCustomView:button2];
UIBarButtonItem* button2Aux = [[UIBarButtonItem alloc] initWithCustomView:button2];
UIView *view = [[UIView alloc] initWithFrame:CGRectMake(0, 0, 19, 19)];
UIButton * button3 = [UIButton buttonWithType:UIButtonTypeSystem];
button3.frame = CGRectMake(0, 4, 23, 15.5);
int altoPantalla = [UIScreen mainScreen].bounds.size.height;
[button3 setBackgroundImage:[UIImage imageNamed:[NSString stringWithFormat:@"Icon_Buzon.png"]] forState:UIControlStateNormal];
[button3 addTarget:self action:@selector(showTut) forControlEvents:UIControlEventTouchUpInside];
[view addSubview:button3];
NSString *cantNotificaciones = self.cantNotificaciones;
NSInteger posX = 0, posY = 0, ancho = 0, alto = 0, radio;
BOOL ponerCirculo = NO;
if (cantNotificaciones.length >= 3) {
cantNotificaciones = @"+99";
posX = 10.5;
posY = 12;
ancho = 21;
alto = 15;
radio = 8;
ponerCirculo = YES;
} else if (cantNotificaciones.length == 2 || (cantNotificaciones.length == 1 && ![cantNotificaciones isEqualToString:@"0"])) {
posX = 8;
posY = 12;
ancho = 16;
alto = 16;
radio = 8;
ponerCirculo = YES;
} else {
ponerCirculo = NO;
}
if (ponerCirculo) {
UILabel *lbl3 = [[UILabel alloc] initWithFrame:CGRectMake(button3.center.x-posX, -posY, ancho, alto)];
[lbl3 setText:cantNotificaciones];
lbl3.textColor = [UIColor whiteColor];
lbl3.backgroundColor = [UIColor redColor];
[lbl3 setFont:[UIFont systemFontOfSize:10]];
lbl3.layer.cornerRadius = radio;
lbl3.clipsToBounds = YES;
[lbl3 setTextAlignment:NSTextAlignmentCenter];
[button3 addSubview:lbl3];
} else {
}
UITapGestureRecognizer *tap = [[UITapGestureRecognizer alloc] initWithTarget:self action:@selector(showTut)];
[tap setNumberOfTouchesRequired:1];
[tap setNumberOfTapsRequired:1];
[view addGestureRecognizer:tap];
UIBarButtonItem* button3Aux = [[UIBarButtonItem alloc] initWithCustomView:view];
switch (altoPantalla) {
case 480:
posicionX = -7;
space = 21;
break;
case 568:
posicionX = -10;
space = 21;
break;
case 667:
posicionX = 19;
space = 27;
break;
case 736:
posicionX = 19;
space = 40;
break;
default:
break;
}
UIBarButtonItem *positiveSpacer = [[UIBarButtonItem alloc]
initWithBarButtonSystemItem:UIBarButtonSystemItemFixedSpace
target:nil action:nil];
positiveSpacer.width = space;
self.navigationItem.rightBarButtonItems = [NSArray arrayWithObjects:button2Aux, positiveSpacer, button3Aux, nil];
[self.view setNeedsLayout];
[self.view setNeedsDisplay];
}
-(void) modificarNumeroBoton:(NSNotification *) notification
{
NSString *cantidad = (NSString *)[notification object];
NSLog(@"Numero recibido: %@",cantidad);
self.cantNotificaciones = cantidad;
[self addSettingsButton];
}
對我來說,有兩種可能的解決方案:要麼進行更新立即(效果會更好),或使它這樣的按鈕不能滾動
謝謝,我是新來的Objective-C,我應該在哪裏放呢? –
我已經意識到了,謝謝! –
太棒了!歡迎:) –