我试图从 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
。
通常,您会将用于设置导航栏按钮的代码放在应响应按钮的 UIViewController
的 viewDidLoad
中。当 UINavigationController 将新的 UIViewController 推送到其堆栈时,它将向 Controller 询问应显示的任何按钮。
假设您的 UINavigationController
的 Root View Controller 是默认生成的 RootViewController
。然后你应该将代码放在RootViewController
的viewDidLoad
中。或者也许在 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/