3

ボタンからビューを開始する場合UIActionSheet、navigationBar の戻るボタンを介してビューに戻ると、ツールバーは表示されたままですが、以前に表示されていたボタンはありません。このエラーは、iOS 6 にアップデートしてから発生し、シミュレーターと iOS 6 のみを実行しているデバイスでテスト中に発生します。ボタンによって押されたビューのツールバーを非表示にするコードをコメントアウトすると、UIActionSheet戻るときに追加されます。

プログラムでツールバー項目を作成し、経由でアクセスしているツールバーからviewWillAppearを表示しています。UIActionSheetself.navigationController.toolbar

この問題の原因は何ですか?iOS 6 が登場してから発生しただけなので、考慮に入れる必要がある変更はありますviewWillAppearか?

ビューが actionSheet からプッシュされる方法は次のとおりです。

- (void)actionSheet:(UIActionSheet *)actionSheet clickedButtonAtIndex:(NSInteger)buttonIndex {

    if (actionSheet.tag == 2) {

    if (buttonIndex == 0) {

        [self dismissAllTips];

        self.actionNoteAddView= [[self.storyboard instantiateViewControllerWithIdentifier:@"IDActionNoteAddView"] retain];

        actionNoteAddView.note_id = 0;
        actionNoteAddView.iscompleted=0;

        [[NSUserDefaults standardUserDefaults] setBool:NO forKey:@"tool_tips"];

        [self.navigationController pushViewController:actionNoteAddView animated:TRUE];

        [actionNoteAddView release];

    }else if(buttonIndex == 1){

        ...

プッシュされたビューのビュー メソッドは次のとおりです。

-(void)viewWillAppear:(BOOL)animated{

    [super viewWillAppear:animated];

    self.navigationItem.hidesBackButton = NO;
    [self.navigationController setToolbarHidden:YES];

    txtcontent.layer.cornerRadius = 10.0f;

}


-(void)viewDidAppear:(BOOL)animated{

    [super viewDidAppear:animated];

}

これらは、actionSheet を使用してビューをプッシュしたビューのビュー メソッドです。

- (void) viewWillAppear:(BOOL)animated{

    [super viewWillAppear:animated];

    self.navigationItem.hidesBackButton = YES;
    [self.navigationController setToolbarHidden:NO];
    self.navigationController.navigationBarHidden=NO;

    self.navigationController.navigationBar.barStyle = UIBarStyleBlackOpaque;
    self.navigationController.navigationBar.tintColor = [UIColor colorWithRed:0.8 green:0.45 blue:0.2 alpha:1];
    self.navigationController.toolbar.barStyle = UIBarStyleBlackOpaque;
    self.navigationController.toolbar.tintColor = [UIColor colorWithRed:0.8 green:0.45 blue:0.2 alpha:1]; 

    UIImage *actionButtonImage = [UIImage imageNamed:@"31-circle-plus@2x.png"];
    UIBarButtonItem *actionButton = [[UIBarButtonItem alloc] initWithImage:actionButtonImage style:UIBarButtonItemStylePlain target:self action:@selector(actionPressed:)
                                     ];

    UIImage *dashButtonImage = [UIImage imageNamed:@"19-gear.png"];
    UIBarButtonItem *dashButton = [[UIBarButtonItem alloc] initWithImage:dashButtonImage style:UIBarButtonItemStylePlain target:self action:@selector(settingsPressed:)];




    UIBarButtonItem *flexItem = [[UIBarButtonItem alloc] initWithBarButtonSystemItem:UIBarButtonSystemItemFlexibleSpace
                                                                              target:nil
                                                                              action:nil];

    NSArray *toolitems = [NSArray arrayWithObjects:dashButton, flexItem, actionButton, flexItem, nil];

    [self setToolbarItems:toolitems];

    self.title = @"Dashboard";

    defaultProfile.text = [[NSUserDefaults standardUserDefaults] stringForKey:@"default_profile"];

    BOOL dailyProcess = [[NSUserDefaults standardUserDefaults] boolForKey:@"daily_process"];

    if(dailyProcess){

        [[NSUserDefaults standardUserDefaults] setBool:NO forKey:@"daily_process"];
        [[NSUserDefaults standardUserDefaults] synchronize];

        loading = [[UIView alloc] initWithFrame:CGRectMake(0, 0, 320, 480)];

        labelProcess = [[UILabel alloc]initWithFrame:CGRectMake(60, 105, 240, 30)];
        labelProcess.text = @"Processing...";
        labelProcess.backgroundColor = [UIColor clearColor];
        labelProcess.textColor=[UIColor colorWithRed:0.8 green:0.45 blue:0.2 alpha:1];
        [labelProcess setFont:[UIFont systemFontOfSize:20]];

        loading.opaque = NO;
        loading.backgroundColor = [UIColor colorWithWhite:0.0f alpha:0.6f];

        indicator = [[UIActivityIndicatorView alloc] initWithActivityIndicatorStyle:UIActivityIndicatorViewStyleWhiteLarge];
        [indicator setHidesWhenStopped:YES];
        indicator.center = self.view.center;

        [self.view addSubview:loading];
        [self.view addSubview:indicator];

        [self.view addSubview:labelProcess];

        [indicator startAnimating];

    }

}


-(void)viewDidAppear:(BOOL)animated{

    [super viewDidAppear:animated];

    CGRect frame = CGRectMake(157, 365, 10, 10);
    UIView *viewToPointAt = [[UIView alloc] initWithFrame:frame];

    [self.view addSubview:viewToPointAt];

    BOOL willies = [[NSUserDefaults standardUserDefaults] boolForKey:@"tool_tips"];

    if(willies==YES){

        if(popTip == nil) {

            popTip = [[[CMPopTipView alloc] initWithMessage:@"Step 1/3: This is the Action Button. You can create, view and auto-fill notes which are then added to your timeline.(Click for step 2)."] autorelease];
            popTip.delegate = self;

            [popTip presentPointingAtView:viewToPointAt inView:self.view animated:YES];
            popTip.backgroundColor = [UIColor colorWithRed:0.8 green:0.45 blue:0.2 alpha:1];
            popTip.textColor = [UIColor whiteColor];

        }

    }

    [viewToPointAt release];

}
4

4 に答える 4

1

さまざまな手法を試し、最終的に1つのビューメソッドで表示し、次のメソッドで非表示にすることで並べ替えました。これは私が遭遇した最も奇妙なバグの1つであり、これはほとんど修正されませんが、未回答の質問があるのは嫌です。

于 2012-10-29T16:37:45.527 に答える
0

これは古いスレッドですが、最近この問題に遭遇しました。私の解決策の手がかりは、新しいビューをプッシュしてからアクション シートを閉じるまでに、ある程度の遅延が必要だったことです。アクションシートがなくなった後にプッシュが発生するように、clickedButtonAtIndex を didDismissWithButtonIndex に変更しました。問題が解決しました!

于 2014-08-15T02:48:53.117 に答える
0

次のビューでツールバーを非表示にすることでこれを解決できますが、ツールバーを含むビューから開くことができる他のビューはすべて必要に応じてツールバーを非表示にする必要があるため、これはあまり良い解決策ではありません。 .

別の解決策は、viewDidDisappear でツールバーを非表示にすることですが、別の問題があります。たとえば、別の新しいビューにもツールバーが必要であり、独自の viewWillAppear でツールバーを表示するように設定すると、新しいビューの viewWillAppear が呼び出されるという問題があります。実際には、前のビューの viewDidDisappear の前に表示されるため、その場合、新しいビューでさえツールバーが消えます。

とにかく、これが iOS5 で正常に動作するため、これが iOS6 のバグであるかどうかはわかりませ。これを行うと、新しいビューを開くコードをメイン キューの最後に配置すると、新しいビューが表示される前にアクション シートが閉じられます (viewDidDisappear の場合と同様ですが、これは次のビューの viewWillAppear への呼び出しの前に発生します)したがって、完璧に機能します)。

于 2013-03-29T02:26:16.547 に答える