iphone从AppDelegate设置RightBarButtonItem

标签 iphone

我试图从 appDelegate 中设置导航栏的右侧按钮,代码编译并执行时没有错误,但按钮没有出现。

如有任何帮助,我们将不胜感激。

谢谢。

NSAutoreleasePool *apool = [[NSAutoreleasePool alloc] init];
    UIActivityIndicatorView *aiv = [[UIActivityIndicatorView alloc] initWithActivityIndicatorStyle:UIActivityIndicatorViewStyleWhite];
    UIBarButtonItem *activityButtonItem = [[UIBarButtonItem alloc] initWithCustomView:aiv];
    [aiv startAnimating]; 
    [aiv release];


    [self.navigationController.navigationItem setRightBarButtonItem:activityButtonItem animated:YES];
    [activityButtonItem release];
    [apool release];

最佳答案

首先一些提示。

在短时间内创建大量自动释放对象的情况下,您可以使用NSAutoReleasePool,例如循环中。引用苹果的话:

If your application creates a lot of temporary autoreleased objects within the event loop, however, it may be beneficial to create “local” autorelease pools to help to minimize the peak memory footprint.

由于您没有创建任何自动释放对象,因此没有必要拥有NSAutoReleasePool

通常,您会将用于设置导航栏按钮的代码放在应响应按钮的 UIViewControllerviewDidLoad 中。当 UINavigationController 将新的 UIViewController 推送到其堆栈时,它将向 Controller 询问应显示的任何按钮。

假设您的 UINavigationController 的 Root View Controller 是默认生成的 RootViewController。然后你应该将代码放在RootViewControllerviewDidLoad中。或者也许在 viewDidAppear: 中,因为您正在为插入设置动画。

UIActivityIndicatorView *aiv = [[UIActivityIndicatorView alloc] initWithActivityIndicatorStyle:UIActivityIndicatorViewStyleWhite];
UIBarButtonItem *activityButtonItem = [[UIBarButtonItem alloc] initWithCustomView:aiv];
[aiv startAnimating]; 
[aiv release];

[self.navigationItem setRightBarButtonItem:activityButtonItem animated:YES];
[activityButtonItem release];

如果您确实必须在应用程序委托(delegate)中包含可以通过以下方式完成的代码:

UIActivityIndicatorView *aiv = [[UIActivityIndicatorView alloc] initWithActivityIndicatorStyle:UIActivityIndicatorViewStyleWhite];
UIBarButtonItem *activityButtonItem = [[UIBarButtonItem alloc] initWithCustomView:aiv];
[aiv startAnimating]; 
[aiv release];

UIViewController *rootController = [self.navigationController topViewController];
rootController.navigationItem.rightBarButtonItem = activityButtonItem;    
[activityButtonItem release];

关于iphone从AppDelegate设置RightBarButtonItem,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/4265781/

相关文章:

iphone - UIRefreshControl 问题

ios - UIView 从右到左有动画

javascript - 损坏的响应式设计(仅在 iPhone 上)- 可以使用 javascript 强制执行媒体查询吗?

iphone - 在搜索显示 Controller 中选择表格 View 单元格后,如何隐藏搜索结果表格 View ?

iphone - iPhone 应用程序在首次启动时要求登录是否可以接受?

iPhone OS 4 多任务处理 - 在后台播放音频

iphone - 为什么会崩溃:stringByAppendingFormat

iphone - 自定义、无图像的 UIButton 标题消失

iphone - 快速枚举期间实际发生了什么?

iphone - 如何检查wifi选项是否启用