0

アプリがバックグラウンドに入る、または再びフォアグラウンドに入るときに UISearch をリセットしたい。UISearch の tableview が非表示になったらそれで十分です。

しかし、AppDelegate.m から非表示にしようとすると、機能しません。UIElements もログに記録しました。(null) もあります。

これが私がそれにアクセスしようとする方法です:

- (void)applicationWillEnterForeground:(UIApplication *)application
{
XLog(@"");
/*
 Called as part of the transition from the background to the active state; here you can undo many of the changes made on entering the background.
 */

if (UI_USER_INTERFACE_IDIOM() == UIUserInterfaceIdiomPad) {
    XLog(@"");
    searchViewController = [[SearchViewController alloc] initWithNibName:@"SearchViewController_iPad" bundle:[NSBundle mainBundle]];
} else {
    XLog(@"");
    searchViewController = [[SearchViewController alloc] initWithNibName:@"SearchViewController_iPhone" bundle:[NSBundle mainBundle]];
}


XLog(@"searchViewController.searchBar.text: %@", searchViewController.searchBar.text);
searchViewController.tableViewSearch.hidden = YES; // is (null)

XLog(@"searchViewController.tableViewSearch: %@", searchViewController.tableViewSearch); // is (null)

}

どうすればアクセスできますか? ここで何か問題がありますか、それとも appdelegate.m を介して他のクラスの要素にアクセスすることは許可されていませんか?

4

1 に答える 1

2
NSArray *ary_navigationControllerViews = [[NSArray alloc] initWithArray:[self.navigationController viewControllers]];
NSPredicate *predicate = [NSPredicate predicateWithFormat:@"self.class.description == %@", [[SearchViewController class] description]];
NSArray *ary_viewController = [[NSArray alloc] initWithArray:[ary_navigationControllerViews filteredArrayUsingPredicate:predicate]];
if ([ary_viewController count] > 0) 
{
   SearchViewController *sVw =  (SearchViewController*) [ary_viewController objectAtIndex:0] ;
  sVw.tableViewSearch.hidden = YES;
}

ビューコントローラの新しいインスタンスを初期化しています。代わりに、ビューコントローラの既存のインスタンスを取得して、ビューを非表示にする必要があります。お役に立てれば。

于 2012-07-30T12:21:35.740 に答える