gpt4 book ai didi

ios - 重新加载导航栏 UIBarButtonItem

转载 作者:塔克拉玛干 更新时间:2023-11-02 08:15:27 25 4
gpt4 key购买 nike

我一直在尝试解决这个问题,但我不知道如何解决。

我有一个 UIButton,我需要向其添加一个 UILabel 作为 subview 。

我需要更新此 UIButton,因为在通过 NSNotification 调用方法之前我没有所需的数字。

问题是,使用这段代码,UIBarButtonItem 需要很长时间才能更改,如果滚动 UITableView(navBar 消失),两个按钮都会消失(即使 navigationBar重新出现)。

- (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];
}

对我来说,有两种可能的解决方案:要么立即更新(会更好),要么让按钮在滚动时不会消失

最佳答案

如果您想重新加载标签文本或表格 View ,请在 Main 线程上执行。

除非指定,否则通知在主线程以外的线程上工作。

这样做:

dispatch_async(dispatch_get_main_queue(), ^(void){
//Update the label text
// Update the Tableview
});

关于ios - 重新加载导航栏 UIBarButtonItem,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/30324653/

25 4 0