iphone как отключить UIBarButtonItem

#iphone #uibarbuttonitem

#iPhone #uibarbuttonitem

Вопрос:

Этот вопрос задавался много раз, но я перепробовал все решения, и ни одно из них не решило мою проблему.

Вот код создания панели инструментов :

 - (id)initWithBlogArticle:(BlogArticle *)theArticle
{
    if (self = [super init])
    {
        CustomToolbar* tools = [[CustomToolbar alloc] initWithFrame:CGRectMake(0, 0, 90, 48.01)];
        [tools setTintColor:[UIColor colorWithRed:0.62 green:0.70 blue:0.13 alpha:1.0]];

        NSMutableArray* buttons = [[NSMutableArray alloc] initWithCapacity:3];

        UIBarButtonItem* previousArticle = [[UIBarButtonItem alloc] initWithBarButtonSystemItem:UIBarButtonSystemItemRewind
                                                                                         target:self
                                                                                         action:@selector(displayPreviousArticle)];

        [previousArticle setStyle:UIBarButtonItemStyleBordered];
        [buttons addObject:previousArticle];
        [previousArticle release];

        UIBarButtonItem *spacer = [[UIBarButtonItem alloc] initWithBarButtonSystemItem:UIBarButtonSystemItemFixedSpace
                                                                                target:nil
                                                                                action:nil];
        [buttons addObject:spacer];
        [spacer release];

        UIBarButtonItem *nextArticle = [[UIBarButtonItem alloc] initWithBarButtonSystemItem:UIBarButtonSystemItemFastForward 
                                                                                     target:self
                                                                                     action:@selector(displayNextArticle)];
        [nextArticle setStyle:UIBarButtonItemStyleBordered];
        [buttons addObject:nextArticle];
        [nextArticle release];

        [tools setItems:buttons animated:NO];

        [buttons release];

        [[self navigationItem] setRightBarButtonItem:[[[UIBarButtonItem alloc] initWithCustomView:tools] autorelease]];
        [tools release];

        [self setWebView:[[UIWebView alloc] initWithFrame:[[UIScreen mainScreen] bounds]]];
        [[self webView] setDelegate:self];
        [self loadBlogArticle:theArticle];

        [self setView:[self webView]];
    }

    return self;
}
  

Я пытался использовать setEnabled: NO всеми возможными способами, но это никогда не работает, что сводит меня с ума, поскольку отключение кнопки должно быть таким simple…so либо это чрезвычайно сложно сделать, либо я не понимаю чего-то очень элементарного.

Пожалуйста, помогите, заранее спасибо.

Комментарии:

1. Вы пробовали это: UIBarButtonItemName.enabled = НЕТ;

2. он должен быть включен: НЕТ, и я пробую на симуляторе, и это работает. Где вы отключаете кнопку?

Ответ №1:

Решение:

 self.navigationItem.rightBarButtonItem.enabled  = NO/YES;
  

существует также:

 self.navigationItem.leftBarButtonItem.enabled  = NO/YES;
  

работает в iOS 5.

Ответ №2:

 Declare previousArticle and nextArticle in header file

- (id)initWithBlogArticle:(BlogArticle *)theArticle
{
if (self = [super init])
{
    CustomToolbar* tools = [[CustomToolbar alloc] initWithFrame:CGRectMake(0, 0, 90, 48.01)];
    [tools setTintColor:[UIColor colorWithRed:0.62 green:0.70 blue:0.13 alpha:1.0]];

    NSMutableArray* buttons = [[NSMutableArray alloc] initWithCapacity:3];

    previousArticle = [[UIBarButtonItem alloc] initWithBarButtonSystemItem:UIBarButtonSystemItemRewind
                                                                                     target:self
                                                                                     action:@selector(displayPreviousArticle)];

    [previousArticle setStyle:UIBarButtonItemStyleBordered];
    [buttons addObject:previousArticle];


    UIBarButtonItem *spacer = [[UIBarButtonItem alloc] initWithBarButtonSystemItem:UIBarButtonSystemItemFixedSpace
                                                                            target:nil
                                                                            action:nil];
    [buttons addObject:spacer];
    [spacer release];

    nextArticle = [[UIBarButtonItem alloc] initWithBarButtonSystemItem:UIBarButtonSystemItemFastForward 
                                                                                 target:self
                                                                                 action:@selector(displayNextArticle)];
    [nextArticle setStyle:UIBarButtonItemStyleBordered];
    [buttons addObject:nextArticle];


    [tools setItems:buttons animated:NO];

    [buttons release];

    [[self navigationItem] setRightBarButtonItem:[[[UIBarButtonItem alloc] initWithCustomView:tools] autorelease]];
    [tools release];

    [self setWebView:[[UIWebView alloc] initWithFrame:[[UIScreen mainScreen] bounds]]];
    [[self webView] setDelegate:self];
    [self loadBlogArticle:theArticle];

    [self setView:[self webView]];
}

return self;
}

-(void)displayNextArticle
{
if(articleEnd)
nextArticle.enabled=NO; 
else
nextArticle.enabled=YES;    

}
-(void)dealloc
{
[previousArticle release];
[nextArticle     release];
}
  

Комментарии:

1. Я уже пробовал это решение раньше, но оно не работало, и теперь оно работает, я не понимаю, возможно, я сделал что-то не так… но теперь все хорошо, спасибо.

2. Однако у меня есть вопрос, если вы не возражаете ответить на него: должен ли я переместить освобождение кнопок в другое место (viewDidUnload dealloc) теперь, когда они принадлежат классу? Я думаю, что я должен это сделать, пожалуйста, подтвердите.

3. Да, мы должны освободить кнопки (предыдущую и следующую) в dealloc.