gpt4 book ai didi

iPhone - 以编程方式将导航栏按钮更改为事件指示器

转载 作者:行者123 更新时间:2023-12-03 21:23:53 26 4
gpt4 key购买 nike

我已将刷新 UIBarButtonItem 添加到 iPhone 应用程序上的导航栏。当用户点击按钮时,我希望刷新按钮更改为动画事件指示器,并且一旦操作(在本例中为下载)完成,将事件指示器切换回刷新按钮。

我使用 IB 添加了刷新按钮。然后,在按钮点击上,我创建一个新的事件指示器,并保留指向原始刷新按钮的指针。就像这样:

refreshButtonItem = self.navigationItem.leftBarButtonItem;
if (activityButtonItem == nil)
{
activityIndicator = [[UIActivityIndicatorView alloc] initWithFrame:CGRectMake(0, 0, 20,20)];
activityButtonItem = [[UIBarButtonItem alloc]initWithCustomView:activityIndicator];

}
self.navigationItem.leftBarButtonItem = activityButtonItem;
[activityIndicator startAnimating];

到目前为止,一切都很好。问题是,当我的下载完成后,我尝试重新添加刷新按钮(使用以下命令):

[activityIndicator stopAnimating];
self.navigationItem.leftBarButtonItem = refreshButtonItem;

我收到以下错误:
[UIBarButtonItem保留]:发送到已释放实例的消息

我没有明确调用发布。

A)何时/何地释放此资源

B)有没有更好的方法来实现我正在寻找的目标?

最佳答案

当您将activityButtonItem 分配给leftBarButtonItem 时,leftBarButtonItem 用来指向的项目将被释放。 leftBarButtonItem(以及所有具有保留选项的属性)的实现与此类似:

- (void)leftBarButtonItem:(UIBarButtonItem *)newItem {
if (newItem != self.leftBarButtonItem) {
[self.leftBarButtonItem release];
leftBarButtonItem = [newItem retain];
}
}

如果您想在重新分配 leftBarButtonItem 后使用refreshButtonItem,请将第一行更改为:

refreshButtonItem = [self.navigationItem.leftBarButtonItem 保留];

关于iPhone - 以编程方式将导航栏按钮更改为事件指示器,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/2249363/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com