#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.