Skip to content

[bug]:- (void)tabBarController:(UITabBarController *)tabBarController didSelectControl:(UIControl *)control不回调 #610

@FengXingwei-Coder

Description

@FengXingwei-Coder



Base Info for this issue

  1. Version:Latest Version as here
  2. Language of App :Objective-C/Swift
  3. iOS System Version:iOS12
  4. Prototype(是否是真机):YES
  5. Issue Type:Crash、Bug、Enhancement(希望能支持一个新需求)、Q-A

1. How to reproduce the problem.

    初始化CYLTabBarController时,使用:@{
                CYLTabBarItemTitle : title ?: @"",
                CYLTabBarItemImage : img ?: @"",
                CYLTabBarItemSelectedImage : selectedImg ?: @"",
            }方式设置过一次。由于业务需要,在某些时机使用:
        [[[self.tabBar].items objectAtIndex:index] setImage:img];
        [[[sel.tabBar].items objectAtIndex:index] setSelectedImage:selectedImg];方式重新设置一次。


导致[bug]:
  • (void)tabBarController:(UITabBarController *)tabBarController didSelectControl:(UIControl *)control不回调。

## 2. Please help me in this way.
<!--- 请详细描述下我需要怎么做才能符合你的需求。 -->

排查发现调用[[[self.tabBar].items objectAtIndex:index] setImage:img];
        [[[sel.tabBar].items objectAtIndex:index] setSelectedImage:selectedImg];再调用[self.view setNeedsLayout];重新触发CYLTabBarController的viewDidLayoutSubviews方法,即重新走到    CYLTabBar *tabBar =  (CYLTabBar *)self.tabBar;
    // add callback for visiable control, included all plusButton.
    [tabBar.cyl_visibleControls enumerateObjectsUsingBlock:^(UIControl * _Nonnull control, NSUInteger idx, BOOL * _Nonnull stop) {
        //to avoid invoking didSelectControl twice, because plusChildViewControllerButtonClicked will invoke setSelectedIndex
        if ([control cyl_isChildViewControllerPlusButton]) {
            return;
        }
        SEL actin = @selector(didSelectControl:);
        [control addTarget:self action:actin forControlEvents:UIControlEventTouchUpInside];
        if (idx == self.selectedIndex) {
            control.selected = YES;
        }
    }];

逻辑,能解决[bug]:

- (void)tabBarController:(UITabBarController *)tabBarController didSelectControl:(UIControl *)control不回调的问题。求问原因?

3. Here is a Demo.

4. Here is my Debug log


Metadata

Metadata

Assignees

Labels

Projects

No projects

Milestone

No milestone

Relationships

None yet

Development

No branches or pull requests

Issue actions