Objective c UITabBarController子视图不';不要显得古怪

Objective c UITabBarController子视图不';不要显得古怪,objective-c,iphone,uitabbarcontroller,uipickerview,Objective C,Iphone,Uitabbarcontroller,Uipickerview,我用4个标签格式编写的iOS9/ObjC应用程序有一个奇怪的问题。“主”ViewController有几个带有控件和图像的子视图。当用户点击该图像时,会弹出一个PickerView,并通过再次点击该图像将其取消。其他选项卡式视图控制器可生成简单视图。除了“主”视图上的一个子视图,我在那里做了一些叠加在图像视图上的石英动画 如果我只停留在“主”视图上并与之交互,则所有视图都会完全按照所需工作。PickerView会按设计显示和消失。切换到另一个ViewController,然后返回“主”视图会导致

我用4个标签格式编写的iOS9/ObjC应用程序有一个奇怪的问题。“主”ViewController有几个带有控件和图像的子视图。当用户点击该图像时,会弹出一个PickerView,并通过再次点击该图像将其取消。其他选项卡式视图控制器可生成简单视图。除了“主”视图上的一个子视图,我在那里做了一些叠加在图像视图上的石英动画

如果我只停留在“主”视图上并与之交互,则所有视图都会完全按照所需工作。PickerView会按设计显示和消失。切换到另一个ViewController,然后返回“主”视图会导致问题:点击图像视图无法弹出选择器。点击在石英层中被识别,触发一个通知事件,该事件在主视图控制器的拾取中拾取,该控制器依次添加拾取子视图,将其带到前面,并启用交互,就像它正常工作时一样,但拾取器从未出现,即使调试器显示它已成功添加到子视图数组中。 更奇怪的是,如果我将主选项卡从主选项卡切换到任何其他选项卡视图,然后返回主选项卡,则选择器现在会再次出现。这一顺序是完全可重复的-tab一旦离开主控台,选择器就不可见,再次tab,然后返回主控台,选择器工作

你觉得从哪里开始找呢?谢谢

下面是一些代码(但我不确定问题出在哪里)


你能展示一些代码吗?解决了这个问题。点击的addObserver位于ViewDidDisplay中,因此每次返回视图时都会添加观察者。因此,偶数次显示视图会立即使PickerView闪烁。解决方案是将addObserver移动到viewDidLoad方法。
@implementation MainViewController

- (void)viewDidLoad {
    [super viewDidLoad];
    self.picker = [[UIPickerView alloc] init];
    self.picker.datasource = self;
    self.picker.delegate = self;
    float screenWidth = [UIScreen mainScreen].bounds.size.width;
    float pickerWidth = screenWidth * 3 / 4;

    // Calculate the starting x coordinate.
    float xPoint = screenWidth / 2 - pickerWidth / 2;
    [self.Picker setFrame: CGRectMake(xPoint, 50.0f, pickerWidth, 250.0f)];
    [self.Picker setClipsToBounds:NO];
    [self.Picker setBackgroundColor:[UIColor whiteColor]];
    self.Picker.showsSelectionIndicator = YES;
    self.Picker.userInteractionEnabled = YES;
.
.
.
    UIImage *base = [UIImage imageNamed:@"Base"];
    self.baseAView = [[UIImageView alloc] initWithFrame:imFrame];
    [self.baseView setImage:base];
    [self.view addSubview:_baseView];

    self.GView = [[GView alloc] initWithFrame:imFrame];
    self.GView.backgroundColor = [UIColor clearColor];
    [self.view addSubview:_GView];
}

-(void) viewDidAppear:(BOOL)animated {
    [[NSNotificationCenter defaultCenter] addObserver:self selector:@selector(doSin) name:@"touchP" object:nil];
}


- (void) doSin {
    // user hits GView, draw Picker if not in View Hierarchy, if in Hierarch, grab value and resign
    NSArray *subViews = [self.view subviews];
    __block NSInteger foundIndex = NSNotFound;
    [subViews enumerateObjectsUsingBlock:^(id obj, NSUInteger idx, BOOL *stop) {
        if ([obj isKindOfClass:[UIPickerView class]]) {
            foundIndex = idx;
            // stop the enumeration
            *stop = YES;
        }
    }];
    if (foundIndex != NSNotFound) {
        // Found the UIPickerView in subviews, so grab value & remove from screen
        [self.view.subviews[foundIndex] removeFromSuperview];
        } else {
        // not in hierarchy, so put it up on screen
        [self.view addSubview:self.Picker];
        [self.view bringSubviewToFront:self.Picker];
        self.view.userInteractionEnabled = YES;
    }
}