0

したがって、私はtabbarcontrollerを持っていて、に通知を渡します。具体的にはtabBarItemに触れます。NSNotificationの問題とモーダルビューコントローラの解除

正常に動作しており、モーダル表示コントローラが閉じられています。しかし、私はそれを特定の方法で変更したいと思っていて、それが期待通りに機能しません。

私は、通知が掲示される前にオブザーバーを初期化しました。これらはtabBarItemsある -

NSArray *viewControllerss = [[NSArray alloc] initWithObjects: myProfileDataViewController, 
sampleViewController,reminderInfoViewController, nil]; 


[self.tabBarContr setViewControllers:viewControllerss animated:YES]; 
self.tabBarContr.selectedIndex = 2; 

私はsampleViewControllerviewWillAppearに通知を送信し、私はtabBarIconが、それはTabBarControllerを閉じることを選択した場合。

しかし、私はsampleViewControllerUITabBarの左端にしたいと思っています。私は、これはTAB BAR CONTROLLERを却下しません

NSArray *viewControllerss = [[NSArray alloc] initWithObjects: sampleViewController, 
myProfileDataViewController, reminderInfoViewController, nil]; 

のようにそれを追加し

そしてそう。

注:にNSArrayが初期化される順序を参照してください。

通知は、あなたが通知を投稿する前に、モーダルビューコントローラ

答えて

0

はあなたが右のNSLogを置いてもらえません提示し、それぞれのビューコントローラにviewWillAppear of sampleViewController`、観察者で掲示されますか?

アプリの読み込み時に出力が表示されるかどうかを確認してください。

EDIT:あなたはこれを試みることができるあなたのsampleViewControllerでは、あなたの応答

に基づいて回答への追加:

それはUITabBarControllerDelegateに準拠してください。次に、あなたのsampleViewControllerの.Mで、のviewDidLoadで、sampleViewController(この場合は自己)

-(void) viewDidLoad 
{ 
    [super viewDidLoad]; 

    // Assuming you have a reference to your tabBarController somewhere 

    [self setDelegate:self]; // try this line or the line below 
    // [[self tabBarController] setDelegate:self]; 

    // The rest of your drawing code here 
} 

するデリゲートを設定

@interface SampleViewController : UIViewController <UITabBarControllerDelegate> 

:あなたのsampleViewControllerクラスのインターフェイスは、次のようなものでなければなりませんデリゲートメソッドをsampleViewController .mファイルのどこかに実装します。

-(void)tabBarController:(UITabBarController *)tabBarController didSelectViewController:(UIViewController *)viewController 
{ 
    // I've included this to see if this method actually gets called or not. 
    NSLog(@"Dismissing modal view controller"); 

    // check to make sure sampleViewController tab was pressed by checking 
    // the class type of the viewController parameter being passed in 

    if ([viewController isKindOfClass:[SampleViewController class]] 
    { 
     // I assume you have a pointer reference to that modal view controller 
     // you want to dismiss 
     [self dismissModalViewController:theUnwantedViewController animated:YES]; 
    } 


} 

これが機能するかどうかを確認してください。

+0

いつもNSLogはどこでも。通知が送信され、オブザーバーが準備完了です。モーダルビューは 'sampleViewController'が最初に配列 – Legolas

+0

に追加されたときに解除されません。そのNSLogから出力が得られましたか?私は、タブの切り替えによってviewWillAppearメソッドがトリガされるかどうか疑問に思っていました。 – Zhang

+0

はい、viewWillAppearをトリガーしませんでした。 – Legolas

関連する問題