Warning: file_get_contents(/data/phpspider/zhask/data//catemap/0/iphone/36.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/0/amazon-s3/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Iphone 是否在ViewController中重新加载/刷新选项卡栏项?_Iphone_Icons_Uitabbarcontroller_Uitabbar_Uitabbaritem - Fatal编程技术网

Iphone 是否在ViewController中重新加载/刷新选项卡栏项?

Iphone 是否在ViewController中重新加载/刷新选项卡栏项?,iphone,icons,uitabbarcontroller,uitabbar,uitabbaritem,Iphone,Icons,Uitabbarcontroller,Uitabbar,Uitabbaritem,我试图在ViewController中更改选项卡栏的图像,但要显示新图像,必须单击每个选项卡栏项 for (CustomTabBarItem *myItem in self.tabBarController.tabBar.items){ myItem.enabled = YES; myItem.badgeValue = @"1"; UIImage *myImage = [[UIImage alloc] initWithContentsOf

我试图在ViewController中更改选项卡栏的图像,但要显示新图像,必须单击每个选项卡栏项

for (CustomTabBarItem *myItem in self.tabBarController.tabBar.items){
        myItem.enabled = YES; 

        myItem.badgeValue = @"1"; 

        UIImage *myImage =  [[UIImage alloc] initWithContentsOfFile:[[DesignManager sharedManager] getPathOfFile:@"test.png"]];

        *myItem.imageSelect= *myImage; // change images of each item. don't appear if I dont click on the item
}
有人知道如何直接显示这些图像吗?
谢谢

您需要用新的选项卡栏项替换旧的选项卡栏项。否则无法动态更新图像

最简单的方法是设置由给定选项卡表示的视图控制器的tabBarItem属性。如果要从该视图控制器中执行此操作,只需编写:

self.tabBarItem = [[UITabBarItem alloc] initWithTitle: @"title" image: myImage: tag: nil];
或者,您可以从其他地方执行此操作,例如您的应用程序代理:

UIViewController* vc = [tabBarController.viewControllers objectAtIndex: 3];
vc.tabBarItem = [[UITabBarItem alloc] initWithTitle: @"title" image: myImage: tag: nil];

我知道这是个老问题。当我需要从另一个活动选项卡更新徽章值时,我遇到了相同的问题。创建另一个
uitabaritem
将解决当前的问题,但在多次调用此代码时可能会导致内存泄漏。另外,当其他视图控制器访问该选项卡时,它们没有对新创建的
uitabaritem
的引用。我的窍门是

vc.tabBarItem = vc.tabBarItem; 

这对我很有用。

嗨,汤姆,你有用于Swift 5.1和iOS 12的吗?我有一个问题: