переключить пользовательское изображение в UIBarButtonItem - PullRequest
2 голосов
/ 25 июня 2010

Последние два дня я ломал голову, пытаясь найти и попробовать свои собственные решения.Я поместил UIBarButtonItem через IB с изображением в верхней панели, чтобы он работал как кнопка отключения / включения звука.Все работает, кроме изображения не меняется.Я использовал следующий код, и он компилируется, но без изменений

if( mute == YES ) {
    UIImage *unmuteImage = [UIImage imageNamed:@"audio-on.png"];
    [self.muteButton setImage:unmuteImage];
    [[NSUserDefaults standardUserDefaults] setBool:NO forKey:@"muteKey"];
}
else {
    UIImage *muteImage = [UIImage imageNamed:@"audio-off.png"];
    [self.muteButton setImage:muteImage];
    [[NSUserDefaults standardUserDefaults] setBool:YES forKey:@"muteKey"];
}

Ответы [ 2 ]

5 голосов
/ 09 июля 2010

Я наконец понял это ... заняло всего пару дней, но я был слишком занят, чтобы опубликовать решение.У нас наконец-то появится время и я с удовольствием выложу свое решение.Я догадывался, что это не сработает, если это не будет сделано на 100% программно, и я был прав.Вот окончательное решение моей проблемы:

if(mute == YES)
{
    UIImage *image = [UIImage imageNamed:@"audio-off.png"];
    UIButton *myMuteButton = [UIButton buttonWithType:UIButtonTypeCustom];
    myMuteButton.bounds = CGRectMake( 0, 0, image.size.width, image.size.height );    
    [myMuteButton setImage:image forState:UIControlStateNormal];
    [myMuteButton addTarget:self action:@selector(mute) forControlEvents:UIControlEventTouchUpInside];    
    UIBarButtonItem *myMuteBarButtonItem = [[UIBarButtonItem alloc] initWithCustomView:myMuteButton];   
    navBar.leftBarButtonItem = myMuteBarButtonItem;
    [myMuteBarButtonItem release];
}
else
{
    UIImage *image = [UIImage imageNamed:@"audio-on.png"];
    UIButton *myUnmuteButton = [UIButton buttonWithType:UIButtonTypeCustom];
    myUnmuteButton.bounds = CGRectMake( 0, 0, image.size.width, image.size.height );    
    [myUnmuteButton setImage:image forState:UIControlStateNormal];
    [myUnmuteButton addTarget:self action:@selector(mute) forControlEvents:UIControlEventTouchUpInside];    
    UIBarButtonItem *myUnmuteBarButtonItem = [[UIBarButtonItem alloc] initWithCustomView:myUnmuteButton];
    navBar.leftBarButtonItem = myUnmuteBarButtonItem;
    [myUnmuteBarButtonItem release];
}

хорошая новость в том, что я наконец-то закончил свое приложение и отправил его в магазин приложений.Надеюсь, все пройдет гладко и с нетерпением жду этого!

0 голосов
/ 03 декабря 2015

Swift

Я настроил свой экземпляр на экземпляр var и использовал его для переключения моего переключателя. У меня также было 3 кнопки в моей навигационной панели.

private var activeStaff:Staff? {
    didSet {
        let image = (activeStaff == nil) ? UIImage(named: "active")! : UIImage(named: "notActive")!
        let button = UIBarButtonItem(image: image, style: .Plain, target: self, action: "activePressed:")

        if navigationItem.rightBarButtonItems?.count == 3 {
            navigationItem.rightBarButtonItems?.removeAtIndex(0)
        }

        navigationItem.rightBarButtonItems?.insert(button, atIndex: 0)
    }
}
...